psycopg2.ProgrammingError:语法错误

时间:2015-11-18 05:39:10

标签: 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 ROLE %s WITH CREATEDB LOGIN PASSWORD \'%s\''
add_data = (user_name, password)
cursor.execute(add_query, add_data)

我一直收到这个错误:

  

psycopg2.ProgrammingError:语法错误在或附近"' foo'"第1行:创造角色' foo'用CREATEDB LOGIN PASSWORD'''''

我认为这是一个逃避引号的问题,但是我可以想到没有运气的各种斜线和引号组合。

1 个答案:

答案 0 :(得分:3)

AsIs

from psycopg2.extensions import AsIs

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

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

密码是一个字符串,所以让Psycopg适应并逃避它。