1

如果我执行包含以下内容的脚本,然后尝试删除文件系统上的 mydb,则在关闭 python 空闲之前我无法这样做。这里有什么问题?

   with sqlite3.connect(r'./mydb') as connection:
      cursor = connection.cursor()
      cursor.executemany('...' )
      connection.commit()
4

1 回答 1

2

sqlite连接上下文管理器管理事务,而不是连接。__exit__处理程序提交或回滚,它不会关闭连接。请参阅将连接用作上下文管理器

连接对象可以用作自动提交或回滚事务的上下文管理器。如果发生异常,事务回滚;否则,事务被提交。

您必须自己显式关闭连接,或使用contextlib.closing上下文管理器

from contextlib import closing

with closing(sqlite3.connect(r'./mydb')) as connection:
    with connection:
        cursor = connection.cursor()
        cursor.executemany('...' )
于 2013-09-25T08:47:37.253 回答