如果我执行包含以下内容的脚本,然后尝试删除文件系统上的mydb,那么我将无法执行此操作,直到closures了python空闲为止。 这里有什么问题?
with sqlite3.connect(r'./mydb') as connection: cursor = connection.cursor() cursor.executemany('...' ) connection.commit()
sqlite
连接上下文管理器管理事务 ,而不是连接。 __exit__
处理程序提交或回滚,它不关闭连接。 请参阅使用连接作为上下文管理器 :
连接对象可以用作自动提交或回滚事务的上下文管理器。 如果发生异常,交易将被回滚; 否则,交易承诺。
您必须自己关闭连接,或使用contextlib.closing
上下文管理器 :
from contextlib import closing with closing(sqlite3.connect(r'./mydb')) as connection: with connection: cursor = connection.cursor() cursor.executemany('...' )