2013-09-25 140 views
1

如果我執行包含以下內容,然後嘗試刪除該文件系統上mydb的一個劇本,我不能這樣做,直到我關閉了Python閒置。這裏有什麼問題?無法刪除SQLite數據庫

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

回答

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('...')