You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:16:39