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

Python操作SQLite3时inventory表组合UNIQUE约束报错求助

解决SQLite中inventory表组合唯一约束失效问题

问题根源

你的inventory表创建语句存在两个关键问题:

  1. 语法错误:CREATE TABLE语句末尾缺少闭合括号,导致SQLite无法正确解析UNIQUE(txp_id, hscode)这个组合唯一约束。
  2. 旧表残留:由于使用了IF NOT EXISTS,如果之前已经创建过结构错误的inventory表(比如误将txp_id单独设为唯一键),新的创建语句不会覆盖旧表,导致约束逻辑完全不符合预期。

解决方案

1. 清理错误的旧表(数据可丢弃时)

先删除存在问题的旧表,确保后续创建的表结构完全符合要求:

theCursor.execute("DROP TABLE IF EXISTS inventory")

2. 修正表创建语句

补充闭合括号,确保组合唯一约束被正确定义:

theCursor.execute("""CREATE TABLE IF NOT EXISTS
    inventory(
        txp_id TEXT, 
        item TEXT, 
        hscode TEXT, 
        rate TEXT, 
        qty TEXT, 
        stock TEXT, 
        UNIQUE(txp_id, hscode)
    )""")

3. 可选:添加外键保证数据一致性

为了确保inventory表的txp_id都对应taxpayers表中存在的记录,可以额外添加外键约束:

theCursor.execute("""CREATE TABLE IF NOT EXISTS
    inventory(
        txp_id TEXT, 
        item TEXT, 
        hscode TEXT, 
        rate TEXT, 
        qty TEXT, 
        stock TEXT, 
        UNIQUE(txp_id, hscode),
        FOREIGN KEY(txp_id) REFERENCES taxpayers(txp_id)
    )""")

完成以上步骤后,同一txp_id搭配不同hscode的记录可以正常插入,而重复的txp_id+hscode组合会触发唯一约束错误,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:10