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

Linux Mint下Python操作SQLite提示‘books表无year列’如何解决?

解决SQLite报错“table books has no column named year”

问题根源

你的代码存在两个关键问题:

  • INSERT语句参数数量不匹配:要插入title, author, year, Remks四个字段,但VALUES里只写了三个占位符(?,?,?),参数不匹配会触发SQL解析异常,结合旧表问题最终抛出year列不存在的提示。
  • 旧表结构未更新:因为使用了CREATE TABLE IF NOT EXISTS,如果之前mydatabase.db里已经存在没有year列的books表,这条语句不会重建表,新的表结构不会生效。

修复步骤

  1. 修正INSERT语句的占位符数量
    将executemany中的SQL语句修改为:

    connection.executemany('INSERT INTO books (title, author, year, Remks) VALUES (?,?,?,?)', books_data)
    

    确保占位符?的数量与要插入的字段数一致(共4个)。

  2. 更新旧表结构
    两种可选方法:

    • 快速重置法:删除当前目录下的mydatabase.db文件,重新运行代码,会用新的表结构创建数据库。
    • 保留数据法:若需保留现有数据,先通过ALTER TABLE添加列:
      connection.execute('ALTER TABLE books ADD COLUMN year INTEGER')
      
      执行完后再运行插入逻辑。
  3. 验证修复
    重新运行代码,此时应该能正常插入数据并查询到year字段的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:42:38