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
变量?或者可能还有其他解决方案?如果第二种情况是可行的,我也需要逃避它。你觉得怎么样?
您无法动态绑定对象名称(本例中为用户和密码),只能动态绑定值。您必须诉诸字符串操作,例如使用 fstring:
db_connection.cursor().execute(
f"CREATE USER ${username} WITH PASSWORD {password}"
)