如何从列表变量中执行Python SQL选择语句?

5 投票
3 回答
5591 浏览
提问于 2025-04-16 18:00

我正在尝试查询我的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,))

撰写回答