2013-09-25 6 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('...') 
Смежные вопросы