SQLite3报no such column: sales_id 记录更新删除功能失效
问题解决方案
核心原因
报错本质是数据库实际存储的Sales表结构和你代码里写的建表语句不一致,触发的常见场景如下:
- 你第一次运行代码创建Sales表时,还没有添加sales_id字段的定义,后续你补加了sales_id的定义,但因为建表语句加了
if not exists判断,只要表已经存在就不会重新执行建表逻辑,旧表结构里始终没有sales_id字段,所以执行增删改操作时就会提示找不到该字段。 - 你建表语句中
UOM unit的字段类型定义不合法,SQLite没有内置的unit数据类型,虽然SQLite动态类型机制不会直接抛出建表错误,但可能引发表结构解析异常。
修复步骤
- 第一步:删除本地已生成的
Bizzapp.db数据库文件,重新运行代码,就会按照你最新的建表语句创建带sales_id字段的Sales表。如果你不想删除原有数据,可以执行SQL语句手动加字段:ALTER TABLE Sales ADD COLUMN sales_id VarChar; - 第二步:修正建表语句中的UOM字段类型,根据你的业务需求替换为合法类型,比如存储单位字符串就改为
UOM VarChar,参考修正后的建表代码:
c.execute(""" CREATE TABLE if not exists Sales( sales_id VarChar, product_id VarChar, customer_id VarChar, quantity int, price int, order_date date, UOM VarChar )""")
- 可选优化:你的更新逻辑中同时修改了sales_id字段,且WHERE条件用的还是修改前的sales_id值,如果sales_id是唯一标识字段,建议不要随意修改该字段值,避免出现数据匹配错误的问题。
内容的提问来源于stack exchange,提问作者Jasjeet Singh
相关产品推荐
相关产品推荐

