В Python с sqlite необходимо закрывать курсор?

Вот сценарий. В Вашей функции Вы выполняете операторы с помощью курсора, но один из них сбои и исключение брошен. Ваша программа выходит из функции прежде, чем закрыть курсор, с которым она работала. Курсор будет плавать вокруг занимания места? Я должен закрыть курсор?

Кроме того, документация Python имеет пример использования курсора и говорит: "Мы можем также закрыть курсор, если мы сделаны с ним". Ключевое слово быть "может", не "должен". Что они имеют в виду точно этим?

35
задан user113946 24 February 2010 в 23:02
поделиться

3 ответа

Возможно, это хорошая идея (хотя это может не иметь большого значения с sqlite, не знаю, но это сделает ваш код более переносимым). Далее, с последними версиями Python (2.5+) это просто:

from __future__ import with_statement
from contextlib import closing

with closing(db.cursor()) as cursor:
    # do some stuff
19
ответ дан 27 November 2019 в 07:20
поделиться

Вы не обязаны вызывать close () для курсора; его можно собирать мусором, как и любой другой объект.

Но даже если ожидание сборки мусора звучит нормально, я думаю, что было бы неплохо убедиться, что такой ресурс, как курсор базы данных, закрывается независимо от того, есть ли исключение или нет.

8
ответ дан 27 November 2019 в 07:20
поделиться

Я не заметил никакого эффекта для sqlite3.Cursor. close () операции пока нет.

После закрытия вы все еще можете вызвать fetch (all | one | many) , который вернет оставшиеся результаты из предыдущего оператора execute. Даже запуск Cursor.execute () по-прежнему работает ...

7
ответ дан 27 November 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: