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

插入数据触发IntegrityError:my_films.title_id唯一约束失败求助

排查IntegrityError: UNIQUE constraint failed: my_films.title_id的问题

我来帮你分析下这个错误的可能原因,以及对应的解决办法:

1. 数据元组格式错误(最可能的直接诱因)

先看你的films列表里的后两个条目:

(3, 'Love Rosie', 2014, 7,6), (4, 'Me Before You', 2016, 7,2)

这里你用逗号分隔了评分的整数和小数部分(比如7,6),导致这两个元组变成了5个元素,而不是INSERT语句要求的4个元素(对应title_id、title、premiered、rating四个字段)。

当executemany执行时,SQLite会错误解析这些多出来的元素,可能把它们当作新行的title_id,进而出现重复的ID值,触发唯一约束失败的错误。

2. 重复执行代码导致表中已有数据

如果你多次运行这段代码,第一次执行时已经成功插入了title_id为1、2、3、4的数据:

  • 再次运行CREATE TABLE时,SQLite会报错(因为表已存在),但如果你的代码跳过了这个错误(比如在交互式环境中只运行了插入部分),直接执行插入操作,就会因为已有相同的title_id而触发唯一约束错误。

解决步骤

第一步:修复数据格式错误

把评分里的逗号改成小数点,确保每个元组都是4个元素:

films = [(1, 'Birds of Prey', 2020, 9), (2, 'The Avengers', 2012, 10), (3, 'Love Rosie', 2014, 7.6), (4, 'Me Before You', 2016, 7.2)]

第二步:避免重复插入数据

如果需要重新运行代码,建议先清空或重建表,避免已有数据干扰:

# 先删除已存在的表(如果有)
cur.execute("DROP TABLE IF EXISTS my_films")
# 重新创建表
cur.execute("""CREATE TABLE my_films ( title_id INT, title TEXT, premiered INT, rating REAL, PRIMARY KEY (title_id))""")
con.commit()
# 执行插入
cur.executemany("INSERT INTO my_films VALUES (?, ?, ?, ?)", films)
con.commit()

第三步:可选——提前验证ID唯一性

如果担心后续还有重复ID的问题,可以在插入前先检查表中已有的title_id:

cur.execute("SELECT title_id FROM my_films")
existing_ids = [row[0] for row in cur.fetchall()]

for film_id, _, _, _ in films:
    if film_id in existing_ids:
        print(f"发现重复的title_id:{film_id},请修改后再插入")

这样应该就能解决你遇到的问题了。

内容的提问来源于stack exchange,提问作者jassiiccaa2020

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:58:00