使用 .format() 时出现 psycopg2 编程错误

psycopg2 Programming Error when using .format()

我不确定这里到底发生了什么,但它可能与 python 中的格式有关。 运行 这会导致错误。

x = '00000201000012EB'
sql = """ SELECT * FROM table WHERE id = {} """.format(x)
conn.execute(sql)

我收到一条错误消息:"EB"

附近出现语法错误

然而当我运行这样的命令时:

sql = """ SELECT * FROM table WHERE id = '00000201000012EB' """
conn.execute(sql)

它工作正常。

我格式化此 sql 语句的方式有问题吗?

信不信由你,通过在字符串中添加更多引号解决了这个问题。

终于成功了。

x = '00000201000012EB'
sql = """ SELECT * FROM table WHERE id = {} """.format("'" + x + "'")

由于 sql 语句需要另一组引号,我只是添加了它们以确保它被视为自己的字符串。

使用变量作为参数 execute():

cur.execute(""" SELECT * FROM my_table WHERE id = %s """, (x,))

如果您确定要使用format(),您应该在占位符两边加上单引号:

sql = """ SELECT * FROM my_table WHERE id = '{}' """.format(x)