如何从列表变量中执行Python SQL选择语句?
我正在尝试查询我的sqlite3数据库,并使用一个列表中的值。以下是我的代码:
for i in range(len(infolist)):
result = cursor.execute('SELECT COUNT(DISTINCT col1)
FROM tablename
WHERE col2 = ?', (infolist[i]))
我收到了这个错误:
ProgrammingError: '提供的绑定数量不正确。当前语句需要1个,但提供了22个。'
这个字符串有22个字符,这就是为什么会有22个绑定。显然,我没有正确地将字符串传递到SQL语句中。
3 个回答
0
你需要加一个逗号来表示这个元组只有一个元素:
>>> ('abc')
'abc'
>>> ('abc',)
('abc',)
试着把 (infolist[i],)
传给 cursor.execute
。
1
你现在需要在 (infolist[i])
的后面加一个逗号,因为现在它是一个22个字符的字符串,而不是一个元组。加上逗号后变成 (infolist[i],)
就可以解决这个问题了。
1
cursor.execute的第二个参数应该是一个序列,但你传入的是一个字符串(字符串其实是字符的序列)。如果你想创建一个只有一个元素的元组,记得要加个逗号。也就是说,应该写成('item',)
,而不是('item')
。
另外,你应该直接遍历这些项目,而不是使用range和i。
for info in infolist:
result = cursor.execute('SELECT COUNT(DISTINCT col1)
FROM tablename
WHERE col2 = ?', (info,))