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

SQLite3数据插入失败排查:JSON数据无法写入SQLite数据库

SQLite3 写入无数据问题排查方案
  • 检查数据库文件路径是否匹配
    代码里如果用相对路径(比如sqlite3.connect('mydb.db')),数据库文件会生成在脚本运行的当前目录。你用SQLBrowser打开的可能是另一个位置的同名文件,导致看不到数据。建议改用绝对路径指定数据库位置,比如:

    conn = sqlite3.connect('/Users/xxx/Documents/mydb.db')
    
  • 核对表结构与插入字段是否一致
    确认创建表的语句和插入语句的字段数量、名称完全匹配。比如表创建时是CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER),如果插入时没指定字段列表,VALUES的数量必须和表字段数一致;或者明确指定字段避免匹配错误:

    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (user_name, user_age))
    
  • 检查插入语句的占位符是否正确
    SQLite的参数占位符是?,不是%s或者{}。用错占位符可能导致插入逻辑静默失败,正确写法示例:

    # 正确写法
    cursor.execute("INSERT INTO users VALUES (?, ?)", (name, age))
    
  • 验证事务提交是否被正确执行
    确保conn.commit()在所有插入操作完成之后执行,且没有被异常打断。可以添加异常捕获排查错误:

    try:
        # 所有插入逻辑
        cursor.execute(...)
        conn.commit()
        print("数据提交成功")
    except Exception as e:
        conn.rollback()
        print(f"插入出错:{e}")
    
  • 查看插入操作的影响行数
    在每次cursor.execute()之后打印cursor.rowcount,如果返回0,说明本次插入没有生效,大概率是语句逻辑有问题:

    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))
    print(f"插入行数:{cursor.rowcount}")  # 正常应返回1
    
  • 确认数据库连接是否正常关闭
    虽然commit()会把数据刷到磁盘,但未关闭连接可能导致缓存未完全写入。操作完成后调用conn.close(),确保资源释放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:55:26