提问人:Horiatiki 提问时间:10/2/2023 最后编辑:Horiatiki 更新时间:10/2/2023 访问量:74
Python:当我在 SQL 代码中使用循环元素时出现问题。错误:sqlite3。InterfaceError:绑定参数 0 时出错 - 可能不支持的类型
Python: problem when i use elements of a loop inside a SQL code. Error: sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type
问:
我想在 Sql 代码中使用。我使用一个循环单独提取
并在 SQL 代码中单独使用它们。但是我有这个错误:every_letter
letters
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
我指定必须保持这样,括号中没有变化。 实际上是上一个 cur.execute 的结果。我用字母 = cursor_test.fetchall() 后面的字母得到它letters = [('a',), ('b',), ('c',), ('d',)]
letters
scrape
正如你所猜到的,我想在sql代码中单独使用每个字母。所以一旦 sql 代码 for , once sql 代码 for , once sql code for , etc etc: 自动,无需手动指定字母a
b
c
我做错了什么?
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])
答:
1赞
HernanATN
10/2/2023
#1
您的代码尝试执行的操作是将 a 传递给查询。 类型 您得到的错误意味着,准确地说,可能不受支持。tuple
letters
list[tuple[str]]
tuple[str]
你是在尝试传递元组
吗?或者您只想以“('a',)”的形式传递字符串文字?
在后一种情况下,应将列表中的每个元素用字符串引号括起来。
letters = ["('a',)", "('b',)", "('c',)", "('d',)"]
这样,当您遍历 中的每个元素时,您正在遍历该方法可以处理的字符串列表。letters
execute
另一方面,如果你需要访问这些元组中的基础元素,你可以使用推导式
。
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)
如果元组包含多个元素,则可以在两个嵌套推导式中进一步解压缩元组
。
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)
评论
0赞
Horiatiki
10/2/2023
你的解决方案不好。字母只是这个问题的一个例子。实际上,字母是用许多元素刮擦的结果。我不能手动在所有这些上加上引号。你还有其他想法吗?
0赞
Horiatiki
10/2/2023
我发现你的第二个解决方案更有用。在sql代码中,我应该写这个吗?其中名称 = ?''', [letters_unpacked])。你能给我看一下完整的代码吗?(包括循环)。谢谢
0赞
Horiatiki
10/2/2023
我看到你编辑了你的答案,但也许你没有阅读我的评论。你能告诉我你的第二个解决方案的完整代码吗?谢谢
0赞
HernanATN
10/2/2023
正如我所写的,您仍然应该遍历新列表。因此,循环和 SQL 位应保持不变。
0赞
HernanATN
10/2/2023
我已经编辑了答案,以解决 s 包含多个元素的情况。我已经按照要求添加了循环。tuple
评论
letters = [('a',), ('b',), ('c',), ('d',)]
您是否知道这会生成一个单元素元组列表?这真的是你想要的吗?WHERE column = value
value
every_letter