Python:当我在SQL代码中使用循环元素时出现问题,错误:sqlite3.InterfaceError:绑定参数0时出错-可能不支持的类型

kqqjbcuj  于 2023-10-23  发布在  SQLite
关注(0)|答案(1)|浏览(156)

在SQL代码中使用every_letter。我使用了一个循环来分别提取letters并在SQL代码中分别使用它们。但我犯了这个错误:

sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.

我指定letters = [('a',), ('b',), ('c',), ('d',)]必须保持不变,括号中没有变化。letters实际上是先前cur.execute的结果。我用letters = cursor_test.fetchall()跟在scrape后面得到它
你可以猜到,我想在sql代码中单独使用每个字母。因此,一旦a的SQL代码,一旦b的SQL代码,一旦c的SQL代码,等等:自动,无需手动指定字母
我做错了什么?

conn = sqlite3.connect('...')
cur = conn.cursor()

letters =  [('a',), ('b',), ('c',), ('d',)]

for every_letter in letters:
    print("every_letter: ", every_letter)

    cur.execute('''SELECT name, example1, example2
               FROM TableExample
               WHERE name = ?''', [every_letter])
zour9fqk

zour9fqk1#

您的代码尝试做的是向查询传递tupleletters的类型是list[tuple[str]]您得到的错误意味着,确切地说,tuple[str]可能不受支持。

您是否正在尝试通过tuple?或者你只是想以“('a',)"的形式传递一个 string literal

在后一种情况下,您应该将列表中的每个元素都用字符串引号括起来。

letters = ["('a',)", "('b',)", "('c',)", "('d',)"]

这样,当您遍历letters中的每个元素时,您正在遍历一个可以由execute方法处理的字符串列表。

另一方面,如果您需要访问这些元组中的底层元素,则可以使用comprehensions

letters = [('a',), ('b',), ('c',), ('d',)]
letters_unpacked = [l for l, in letters]

并在未打包的列表上重新排序。

  • 请注意,这两个语句可以组合在一起,例如,如果你得到了列表,而不是硬编码它。
letters = [tup for tup, in someFunction()]

for every_letter in letters:
    print("every_letter: ", every_letter)

    cur.execute('''SELECT name, example1, example2
               FROM TableExample
               WHERE name = ?''', every_letter)

如果tuple s包含 * 多个 * 元素,您可以进一步将tuple解压缩到两个嵌套的解析中。

letters = [element for element in [tup for tup, in someFunction()]]

for every_letter in letters:
    print("every_letter: ", every_letter)

    cur.execute('''SELECT name, example1, example2
               FROM TableExample
               WHERE name = ?''', every_letter)

相关问题