Postgresql psycopg2.ProgrammingError:语法错误

Postgresql psycopg2.ProgrammingError:语法错误,postgresql,psycopg2,Postgresql,Psycopg2,我知道有很多类似的问题,但我还没有找到一个对我有帮助的 我正在使用Python和psycopg2与PostGresQL数据库进行接口。这是我的密码: conn = psycopg2.connect(dbname=db_name, user=user_name) conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) cursor = conn.cursor() add_query = 'CREATE ROL

我知道有很多类似的问题,但我还没有找到一个对我有帮助的

我正在使用Python和psycopg2与PostGresQL数据库进行接口。这是我的密码:

conn = psycopg2.connect(dbname=db_name, user=user_name)
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
cursor = conn.cursor()
add_query = 'CREATE ROLE %s WITH CREATEDB LOGIN PASSWORD \'%s\''
add_data = (user_name, password)
cursor.execute(add_query, add_data)
我不断地发现这个错误:

psycopg2.ProgrammingError:第1行“foo”处或附近的语法错误:使用CREATEDB登录密码“bar”创建角色“foo”

我原以为这是转义引号的问题,但我能想到的斜杠和引号的每一个组合都是运气不佳的。

角色名称是一个标识符,因此没有单引号。如果需要非法字符,可以用双引号将其括起来,但如果不是这样的话,这是个坏主意


密码是一个字符串,因此让Psycopg调整并转义它。

注意,这将使角色名服从大小写折叠。如果你想避免,你需要引用它。不幸的是,psycopg2不提供
psycopg2.extensions.QuotedString
的标识符引号变体,因此您必须编写一个或手动将任何双引号加倍。
from psycopg2.extensions import AsIs

add_query = "CREATE ROLE %s WITH CREATEDB LOGIN PASSWORD %s"
add_data = (AsIs(user), password)