此问题在此处已有答案:
How to use variables in SQL statement in Python?(5个答案)
Why do I get "TypeError: not all arguments converted during string formatting" when trying to use a string in a parameterized SQL query?(8个答案)
4小时前关门了。
我尝试执行一个简单的查询,但无论我如何传递参数都得到此错误。
下面是查询(我使用Trac db对象连接到数据库):
cursor.execute("""SELECT name FROM "%s".customer WHERE firm_id='%s'""" % (schema, each['id']))
schema和each['id']都是简单字符串
print("""SELECT name FROM "%s".customer WHERE firm_id='%s'""" % (schema, each['id']))
结果:SELECT name FROM "Planing".customer WHERE firm_id='135'
在firm_id=
后面有一个移除引号的错误,但是这种方式将参数视为一个整数,而::text
会导致同样的错误。
7条答案
按热度按时间nqwrtyyt1#
在我的例子中,我没有意识到你必须向cursor.execute传递一个元组。我有这个:
但我需要传递一个元组
ubof19bj2#
我得到了这个相同的错误,并且无法为我的生活工作如何修复,最后这是我的错误,因为我没有足够的参数匹配元组中的元素数量:
请注意,我要插入到表中的值中有5个元素,但元组中有6个元素。
z9gpfhce3#
建议不要使用字符串插值来传递数据库查询中的变量,但使用字符串插值来设置表名是可以的,只要它不是外部输入或您限制了允许的值。
API使用规则为针对数据库进行编程提供了指导。
mcvgt66p4#
使用
AsIs
nwnhqdif5#
你可以试试这个:
如果在
value1
之后缺少(,)
,则会出现错误。os8fio9y6#
在SQL命令中传递变量的正确方法是使用
execute()
方法的第二个参数。我认为你应该从第二个参数中删除单引号,请在这里阅读-http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters。请注意,不能将表名作为参数传递给
execute
,这被认为是一种不好的做法,但有一些解决方法:Passing table name as a parameter in psycopg2
psycopg2 cursor.execute() with SQL query parameter causes syntax error
要传递表名,请尝试以下操作:
tnkciper7#
每次我有这样的错误,我是传递错误数量的值。尝试检查它