SQLite删除语句在DB Viewer生效但Python执行无效果问题排查
问题原因与解决方法
- 核心原因:Python的
sqlite3模块默认启用事务机制,执行execute()后,删除操作会被暂存到事务中,若不手动提交,数据库不会持久化这些修改,导致看起来没生效。而DB Browser for SQLite执行语句时默认自动提交事务,所以能正常生效。 - 解决办法:
- 执行删除语句后,显式调用连接对象的
commit()方法提交事务:connection.execute("DELETE FROM ticket WHERE ROWID = (SELECT MAX(ROWID) FROM ticket)") connection.commit() # 必须添加此行完成事务提交 - 或者在创建数据库连接时开启自动提交模式:
开启自动提交后,每次connection = sqlite3.connect('你的数据库文件.db', isolation_level=None)execute()执行的修改都会立即生效,无需手动调用commit()。
- 执行删除语句后,显式调用连接对象的
- 验证方式:执行删除后,可先查询
SELECT MAX(ROWID) FROM ticket,若提交前结果未变化、提交后才更新,即可确认是事务未提交导致的问题。
内容的提问来源于stack exchange,提问作者user3617217
相关产品推荐
相关产品推荐

