使用Python sqlite3插入数据后DB Browser for SQLite无数据显示
问题原因
你遇到的问题是SQLite默认需要手动提交事务,DML(数据操纵语言,如INSERT、UPDATE、DELETE)类操作执行后,仅保存在内存缓存中,没有调用提交方法的话不会写入磁盘数据库文件,程序退出后操作会自动回滚。而CREATE TABLE属于DDL(数据定义语言),SQLite会对这类语句自动提交,所以你能看到表结构但看不到插入的数据。
解决方案
- 方案1:手动提交事务
执行完插入操作后显式调用commit()方法,操作完成后关闭数据库连接,修改后代码如下:
import sqlite3 as sql connection = sql.connect("points.db") cursor = connection.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS servers (server_id TEXT, name TEXT, exp INTEGER)") cursor.execute("INSERT INTO servers VALUES ('848117357214040104', 'brknarsy', 20)") # 新增提交语句 connection.commit() # 操作完成后关闭连接 connection.close()
- 方案2:开启自动提交
连接数据库时设置isolation_level=None开启自动提交模式,不需要手动调用commit:
import sqlite3 as sql # 开启自动提交 connection = sql.connect("points.db", isolation_level=None) cursor = connection.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS servers (server_id TEXT, name TEXT, exp INTEGER)") cursor.execute("INSERT INTO servers VALUES ('848117357214040104', 'brknarsy', 20)") connection.close()
注意:自动提交模式下所有操作执行后直接写入磁盘,批量操作时性能会低于手动提交,且出现错误时无法回滚修改,更推荐使用手动提交的方式。
- 方案3:使用上下文管理器自动处理提交和回滚
Python的sqlite3连接支持上下文管理器,会在代码块正常执行完成后自动提交,出现异常时自动回滚,无需手动处理提交和关闭逻辑:
import sqlite3 as sql with sql.connect("points.db") as connection: cursor = connection.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS servers (server_id TEXT, name TEXT, exp INTEGER)") cursor.execute("INSERT INTO servers VALUES ('848117357214040104', 'brknarsy', 20)")
修改代码执行后,记得在DB Browser for SQLite中刷新数据库或者重新打开数据库文件,避免工具缓存导致看不到最新写入的数据。
内容的提问来源于stack exchange,提问作者brknarsy
相关产品推荐
相关产品推荐

