为了账号安全,请及时绑定邮箱和手机立即绑定

postgres上的Sql alchemy报价数据库绑定参数

postgres上的Sql alchemy报价数据库绑定参数

慕斯王 2022-06-14 17:11:39
我是 sql 炼金术的新手。我有一个 postgres 本地服务器,我想使用 sql alchemy 创建一个数据库。我有以下代码:connection = engine.connect()connection.execute(    text("CREATE DATABASE :database_name").bindparams(bindparam('database_name', quote=False)),    database_name="test_db")但不幸的是,这对数据库名称参数进行了单引号,这在 postgres 中不起作用。来自 sql alchemy 的日志:[SQL: CREATE DATABASE %(database_name)s][parameters: {'database_name': 'test_db'}]sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "'test_db'" LINE 1: CREATE DATABASE 'test_db`'在 postgres 日志中,它执行以下语句,由于单引号,该语句无效。一个有效的应该有双引号:CREATE DATABASE 'test_db'有没有办法在结果语句中不引用绑定参数?我不想自己进行参数引用和字符串创建,因为我认为这种抽象应该由 sql alchemy 处理 - 以防我更改我的底层数据库引擎,例如,这看起来是 sql alchemy 促进避免 sql 的机制也注射。同样的问题也适用于其他 postgres 语句,例如使用密码创建用户或授予现有用户权限,所有这些都需要引用 postgres 特定的引用。
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

除了、或之外SELECT,您不能在语句中使用参数。INSERTUPDATEDELETE


您必须将CREATE DATABASE语句构造为包含数据库名称的字符串。就像是


from psycopg2 import sql


cursor.execute(

    sql.SQL("CREATE DATABASE {}").format(sql.Identifier('test_db'))

)


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号