【发布时间】:2012-03-22 15:22:31
【问题描述】:
我正在做这样的事情......
conn = sqlite3.connect(db_filename)
with conn:
cur = conn.cursor()
cur.execute( ... )
with 自动提交更改。但是文档对关闭连接只字未提。
实际上我可以在后面的语句中使用conn(我已经测试过)。因此,上下文管理器似乎没有关闭连接。
我是否必须手动关闭连接。如果我让它打开怎么办?
编辑
我的发现:
- 上下文管理器中的连接未关闭,我已经测试并确认了。在
__exit__上,上下文管理器仅通过执行conn.commit()来提交更改 -
with conn和with sqlite3.connect(db_filename) as conn相同,因此使用其中任何一个都可以保持连接处于活动状态 -
with语句不会创建新范围,因此在 with 套件内创建的所有变量都可以在其外部访问 - 最后,您应该手动关闭连接
【问题讨论】:
-
如果你让它保持打开状态,它会一直保持打开状态,直到它超出范围并被垃圾收集。那时它可能安全关闭(我相信
sqlite3会这样做)。但安全总比后悔好。当您不再使用它们时关闭它们。 -
很高兴看到有 6 个代表的 SO 用户回来并反驳他们认为没有回答问题的答案。那里有一个很大的 +1。
标签: python sqlite database-connection