【问题标题】:Python SQL Select statement from a list variable?来自列表变量的Python SQL Select语句?
【发布时间】:2011-05-20 01:46:13
【问题描述】:

我正在尝试查询我的 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 语句中。

【问题讨论】:

  • 使用IN 子句,如果可以将数组转换为逗号分隔的列表,会更好地工作并减少循环的需要。

标签: python sql sqlite


【解决方案1】:

cursor.execute 的第二个参数是一个序列,并且您已经向它传递了一个字符串(它是一个字符序列)。如果你试图做一个 1 元素元组,你需要一个逗号。即('item',) 而不是('item')

您还应该遍历项目而不使用 range 和 i:

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

【讨论】:

  • 感谢您的信息,您对迭代多个列表有何想法,即。 for i in range(len(infolist)): cursor.execute('UPDATE tabledata SET col1=?,col2=? WHERE col3=?', (infolist[i], infolist2[i], infolist3[i]))
  • 这是另一个问题,但cursor.executemany('UPDATE tabledata SET col1=?,col2=? WHERE col3=?', zip(inforlist, infolist2, infolist3)) 是您想要的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-05
      • 2011-03-12
      • 2021-05-14
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      相关资源
      最近更新 更多