psycopg2 在占位符周围有双引号

问题描述 投票:0回答:1

Postgres CLI:

在用户名周围使用单引号我收到错误:

some_db=> CREATE USER 'foobar' WITH PASSWORD 'pass';
                      ^      ^
ERROR:  syntax error at or near "'foobar'"
LINE 1: CREATE USER 'foobar' WITH PASSWORD 'pass';

但是双引号没问题:

some_db=> CREATE USER "foobar" WITH PASSWORD 'pass';
                      ^      ^
CREATE ROLE

Python代码:

执行这段代码时:

db_connection.cursor().execute(
  "CREATE USER %s WITH PASSWORD %s",
  (username, password,)
)

我也收到错误:

Error creating User: syntax error at or near "'foobar'"
LINE 1: CREATE USER 'foobar' WITH PASSWORD '9f...

这是预期的,因为使用查询参数时会自动添加单引号。

问题:有没有办法将

psycopg2
配置为使用双引号,或者我需要直接在查询中嵌入
username
变量?或者可能还有其他解决方案?如果第二种情况是可行的,我也需要逃避它。你觉得怎么样?

python-3.x postgresql psycopg2
1个回答
0
投票

您无法动态绑定对象名称(本例中为用户和密码),只能动态绑定值。您必须诉诸字符串操作,例如使用 fstring:

db_connection.cursor().execute(
  f"CREATE USER ${username} WITH PASSWORD {password}"
)
© www.soinside.com 2019 - 2024. All rights reserved.