SQL代码中使用循环元素遇sqlite3.InterfaceError错误的求助
错误原因及解决方法:sqlite3.InterfaceError参数绑定失败
错误原因
你拿到的letters列表里的每个元素都是单元素元组(比如('a',)),执行cur.execute时,你把整个元组every_letter放进参数列表[every_letter],相当于给SQL传了一个元组类型的值,但SQLite期望的是字符串类型参数,因此触发sqlite3.InterfaceError错误。
解决方法
只需从每个元组中提取内部的字符串元素即可,两种简单实现方式:
方式1:直接取元组第一个元素
修改循环内的cur.execute代码,替换参数为元组的第一个元素:
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[0]])
方式2:利用元组解包
用*操作符解包单元素元组,直接提取内部字符串:
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])
两种方法都能让SQLite拿到正确的字符串参数,解决绑定错误。
内容的提问来源于stack exchange,提问作者Zollikofen4
相关产品推荐
相关产品推荐

