如何将带有值和表名的参数化语句传递给Psycopg2?

2024-09-30 01:36:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我基本上是想完成回答者在这里指出的:psycopg2 cursor.execute() with SQL query parameter causes syntax error

我的声明是:

    cursor.execute('SELECT %s FROM %s WHERE %s = %s' % (pkey,table,field, "%s"), (value))

但当我运行它时,我得到了一个错误:

^{pr2}$

Tags: from声明executesqlparameterwitherrorwhere
2条回答

您的问题是不是引用,而是Python的元组语法。在

正如您在上面已经说过的,表示一个元素元组的正确方法是(value,)。一般来说,元组语法是(非正式的):

()
(value,)
(value, value)
(value, value, value)

等等,对于多元元组。在

接受的答案并不真正正确,其中建议的更改纯粹是一个品味问题(是否将最后一个“%s”附加在替换之后,而不是您的尝试)。在


请记住:在Python中执行常见的字符串替换时,如果字符串只有一个%s,那么可以删除元组,只需传递单个替换字符串本身:

^{pr2}$

这将导致foo bar。在

你可以在psycopgcursor.execute上尝试同样的方法,也许它可以工作(我会在发布之前自己测试它,但我不能)。在

尝试以下操作,db模块应注意正确引用:

sql = 'SELECT %s FROM %s WHERE %s' % (pkey, table, field) + ' = %s'
cursor.execute(sql, (value, ))

相关问题 更多 >

    热门问题