Skip to main content
 首页 » 编程设计

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

2025年05月04日15thcjp

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

我的声明是:

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

但是当我运行它时出现错误:

---> 89         cur.execute('SELECT %s FROM %s WHERE %s = %s' % (pkey,table,field, "%s"), (value)) 
     90         res=cur.fetchone() 
     91         if res==None: 
 
TypeError: not all arguments converted during string formatting 

请您参考如下方法:

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

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

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

对于多元素元组依此类推。

已接受的答案并非真正正确,其中建议的更改纯粹是个人喜好问题(替换后附加最后一个 '%s' 与您的尝试)。


请记住这一点:在 Python 中进行常见的字符串替换时,当您的字符串只有一个 %s 时,您可以删除元组并简单地传递单个替换字符串本身:

'foo %s' % 'bar' 

这将导致 foo bar。

你可以用 psycopg 的 cursor.execute 做同样的尝试,也许它可以工作(我会在发布之前自己测试它,但是我不能)。