Вот сценарий. В Вашей функции Вы выполняете операторы с помощью курсора, но один из них сбои и исключение брошен. Ваша программа выходит из функции прежде, чем закрыть курсор, с которым она работала. Курсор будет плавать вокруг занимания места? Я должен закрыть курсор?
Кроме того, документация Python имеет пример использования курсора и говорит: "Мы можем также закрыть курсор, если мы сделаны с ним". Ключевое слово быть "может", не "должен". Что они имеют в виду точно этим?
Возможно, это хорошая идея (хотя это может не иметь большого значения с sqlite, не знаю, но это сделает ваш код более переносимым). Далее, с последними версиями Python (2.5+) это просто:
from __future__ import with_statement
from contextlib import closing
with closing(db.cursor()) as cursor:
# do some stuff
Вы не обязаны вызывать close ()
для курсора; его можно собирать мусором, как и любой другой объект.
Но даже если ожидание сборки мусора звучит нормально, я думаю, что было бы неплохо убедиться, что такой ресурс, как курсор базы данных, закрывается независимо от того, есть ли исключение или нет.
Я не заметил никакого эффекта для sqlite3.Cursor. close ()
операции пока нет.
После закрытия вы все еще можете вызвать fetch (all | one | many)
, который вернет оставшиеся результаты из предыдущего оператора execute. Даже запуск Cursor.execute ()
по-прежнему работает ...