2

我基本上是在尝试完成回答者在此处指出的内容:psycopg2 cursor.execute() with SQL query parameter cause 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
4

2 回答 2

4

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

sql = 'SELECT %s FROM %s WHERE %s' % (pkey, table, field) + ' = %s'
cursor.execute(sql, (value, ))
于 2012-04-08T05:50:36.577 回答
4

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

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

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

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

接受的答案并不正确,其中建议的更改纯粹是口味问题(在替换后附加最后一个 '%s' 与您的尝试相比)。


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

'foo %s' % 'bar'

这将导致foo bar.

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

于 2012-04-08T22:45:08.613 回答