
SQLite 数据库在 Python 中跨文件访问失败,通常是因为未提交事务;本文详解如何通过 commit() 持久化数据,并确保多文件间可靠读写。
sqlite 数据库在 python 中跨文件访问失败,通常是因为未提交事务;本文详解如何通过 `commit()` 持久化数据,并确保多文件间可靠读写。
在 Python 中使用 SQLite 时,一个常见误区是:执行 INSERT 等写操作后未显式调用 con.commit()。SQLite 默认启用事务机制——每次写操作(如 INSERT、UPDATE、DELETE)都会自动开启一个新事务,但除非显式提交,否则更改仅存在于内存中,程序退出或连接关闭时将被回滚,数据不会写入磁盘文件。这正是你在第二份脚本中查不到数据的根本原因:第一份插入数据的脚本运行完毕后未提交,数据库文件实际仍为空。
✅ 正确做法:务必显式提交事务
修改你的数据插入脚本,在 setData() 调用后添加 con.commit(),并在操作完成后关闭连接:
import sqlite3 as sql
con = sql.connect("db_Persons.db")
cur = con.cursor()
def setData():
cur.execute("""
INSERT INTO Persons (Name, NumberPlate, Parking)
VALUES
('Alfred', 'DK12345', 0),
('Bent', 'DK45932', 0),
('Charlotte', 'DK84975', 0),
('Dorte', 'DK98347', 0);
""")
setData()
con.commit() # ? 关键:持久化写入磁盘
con.close() # ? 推荐:显式关闭连接
⚠️ 注意事项:
python全能编程助手下载SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
- commit() 必须在 con.close() 之前调用,否则提交无效;
- 若使用 with 语句管理连接(推荐),可自动提交(需配合 isolation_level=None 或手动 commit),但显式调用 commit() 更清晰可控;
- 创建表的操作(CREATE TABLE)也属于 DDL,虽部分 SQLite 版本会自动提交,但为一致性起见,建议对所有写操作统一处理。
✅ 验证与跨文件访问
完成上述修改并运行插入脚本后,数据库文件 db_Persons.db 将真实包含数据。此时,你原来的查询脚本即可正常工作:
import sqlite3 as sql
con = sql.connect("db_Persons.db")
cur = con.cursor()
cur.execute("SELECT * FROM Persons")
records = cur.fetchall()
print(f"Total rows are: {len(records)}")
print("Printing each row:")
for row in records:
print(f"Id: {row[0]}, Name: {row[1]}, Licence Plate: {row[2]}, Parking Spot: {row[3]}")
con.close()
✅ 最佳实践建议
- 统一路径管理:确保所有脚本访问的是同一数据库文件路径(建议使用绝对路径或 os.path.join() 构建);
- 错误处理增强:生产环境中应包裹 try...except,并在异常时调用 con.rollback();
-
使用上下文管理器(推荐):
with sql.connect("db_Persons.db") as con: cur = con.cursor() cur.execute("INSERT INTO ...", values) con.commit() # 显式 commit 依然必要 # 连接自动关闭,且若未 commit 则自动 rollback
只要确保写操作后调用 con.commit(),SQLite 数据库就能在多个 Python 文件间稳定、可靠地共享数据。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











