Python向SQLite插入元组列表报错,寻求解决方法
Hey,这个问题其实是个很容易踩的小坑!你看你写的executemany那一行,把变量searchterms用引号括起来当成字符串传进去了,这就完全搞错了传递的对象。
错误根源分析
你写的代码行:
cur.executemany("INSERT INTO Cases(caseYR, caseNUM) VALUES (?,?)", ("searchterms"))
这里的("searchterms")本质上就是一个普通字符串(括号在这里不会创建元组,除非你加个逗号变成("searchterms",))。sqlite3会把这个字符串当作单条要插入的数据,而你的SQL语句需要2个绑定值(对应caseYR和caseNUM两列),自然就会报“绑定数量不匹配”的错误。
修正后的代码
正确的做法是直接传递你定义好的searchterms列表变量,不需要加任何引号,也不需要多余的括号:
import sqlite3 # 你的元组列表 searchterms = [('2014', '100908'), ('2014', '101049'), ('2014', '101007'), ('2014', '100881'), ('2014', '100866')] conn = sqlite3.connect('searchdata.db') cur = conn.cursor() cur.execute('''CREATE TABLE IF NOT EXISTS Cases (caseYR TEXT, caseNUM TEXT)''') # 直接传searchterms变量即可,它是符合要求的可迭代对象 cur.executemany("INSERT INTO Cases(caseYR, caseNUM) VALUES (?,?)", searchterms) conn.commit() # 记得关闭连接 conn.close()
额外小建议
推荐用with语句管理数据库连接,它会自动处理连接的关闭,避免忘记关闭的问题:
import sqlite3 searchterms = [('2014', '100908'), ('2014', '101049'), ('2014', '101007'), ('2014', '100881'), ('2014', '100866')] with sqlite3.connect('searchdata.db') as conn: cur = conn.cursor() cur.execute('''CREATE TABLE IF NOT EXISTS Cases (caseYR TEXT, caseNUM TEXT)''') cur.executemany("INSERT INTO Cases(caseYR, caseNUM) VALUES (?,?)", searchterms) conn.commit()
内容的提问来源于stack exchange,提问作者John Taylor
相关产品推荐
相关产品推荐

