Python SQL从列表变量中选择语句?

时间:2011-05-20 01:46:13

标签: python sql sqlite

我正在尝试查询我的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 :(得分:1)

您需要在(infolist[i])的末尾添加一个逗号,现在它是一个22个字符的字符串而不是元组。 (infolist[i],)应该解决这个问题

答案 1 :(得分:1)

cursor.execute的第二个参数是一个序列,你已经传递了一个字符串(这是一个字符序列)。如果您尝试执行1元素元组,则需要逗号。即('item',)而不是('item')

此外,您应该遍历项目,而不是使用范围和i:

for info in infolist:
    result = cursor.execute('SELECT COUNT(DISTINCT col1) 
                               FROM tablename 
                              WHERE col2 = ?', (info,))

答案 2 :(得分:0)

你需要添加一个逗号来表示元组有1个元素:

>>> ('abc')
'abc'
>>> ('abc',)
('abc',)

尝试将(infolist[i],)传递给cursor.execute