如果我执行包含以下内容的脚本然后尝试删除文件系统上的mydb,我将无法执行此操作,直到我关闭python空闲。这是什么问题?
with sqlite3.connect(r'./mydb') as connection:
cursor = connection.cursor()
cursor.executemany('...' )
connection.commit()
答案 0 :(得分:2)
sqlite
连接上下文管理器管理事务,而不是连接。 __exit__
处理程序提交或回滚,不关闭连接。见Using the connection as a context manager:
连接对象可以用作自动提交或回滚事务的上下文管理器。如果发生异常,则回滚事务;否则,交易已经提交。
您必须自己明确关闭连接,或使用contextlib.closing
context manager:
from contextlib import closing
with closing(sqlite3.connect(r'./mydb')) as connection:
with connection:
cursor = connection.cursor()
cursor.executemany('...' )