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
相关产品推荐
相关产品推荐

