我正在做这样的事......
conn = sqlite3.connect(db_filename)
with conn:
cur = conn.cursor()
cur.execute( ... )
Run Code Online (Sandbox Code Playgroud)
with自动提交更改.但是文档没有提到关闭连接.
实际上我可以conn在以后的陈述中使用(我已经测试过).因此,似乎上下文管理器没有关闭连接.
我是否必须手动关闭连接.如果我把它打开怎么办?
编辑
我的结论......
__exit__,上下文管理器ONLY通过执行来提交更改conn.commit()with conn并且with sqlite3.connect(db_filename) as conn是同一件事.所以使用其中任何一个仍将使连接保持活跃with 语句不会创建新范围,因此在with的套件内创建的所有变量都可以在其外部访问我在我的应用程序中进行了一些重复操作(测试它),突然间我得到一个奇怪的错误:
OperationalError: database is locked
Run Code Online (Sandbox Code Playgroud)
我重新启动了服务器,但错误仍然存在.一切都是关于什么的?
而不是使用:
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute(...)
c.close()
Run Code Online (Sandbox Code Playgroud)
是否可以使用 Pythonic 成语:
with conn.cursor() as c:
c.execute(...)
Run Code Online (Sandbox Code Playgroud)
它似乎不起作用:
AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)
注:关闭,因为游标是很重要的这个。