Python操作SQLite时出现“Incorrect number of bindings supplied”错误求助
问题原因
错误出在con.execute()的参数传递环节。sqlite3的execute()方法要求第二个参数必须是序列类型(比如元组、列表),但你直接传入了字符串'id123'——Python会把字符串当作字符序列处理,'id123'被拆成了['i','d','1','2','3']五个元素,和SQL语句里仅有的1个?占位符不匹配,因此抛出绑定数量错误。
修正方案
把字符串包装成元组(注意单元素元组必须加逗号,避免被识别成普通括号包裹的字符串):
import sqlite3 db_file = "test.db" con = sqlite3.connect(db_file) cur = con.cursor() cur.execute('DROP TABLE IF EXISTS image') cur.execute(''' CREATE TABLE image( id INTEGER PRIMARY KEY, listing_id TEXT NOT NULL, url TEXT NOT NULL, image BLOB NOT NULL )''') # 修正:将参数改为单元素元组 res = con.execute(''' SELECT listing_id, url FROM image WHERE listing_id=? ''', ('id123',))
也可以用列表传递参数,效果一样:
res = con.execute(''' SELECT listing_id, url FROM image WHERE listing_id=? ''', ['id123'])
注意事项
- 无论SQL语句里有几个占位符,
execute()的第二个参数都必须是序列类型,哪怕只有一个参数。 - 单元素元组的逗号不能省略,否则
('id123')会被Python解析成字符串'id123',依然会触发相同的错误。
内容的提问来源于stack exchange,提问作者quant
相关产品推荐
相关产品推荐

