Как узнать, закрыто ли соединение базы данных Python SQLite или курсор?

Скажем, что у вас есть следующий код:

import sqlite3

conn = sqlite3.connect('mydb')
cur = conn.cursor()
# some database actions
cur.close()
conn.close()
# more code below

Если я попытаюсь использовать объекты conn или cur позже, как я могу сказать, что они закрыты? Я не могу найти метод .isclosed() или что-то в этом роде.

Ответ 1

Вы можете заключить в оператор try, except:

>>> conn = sqlite3.connect('mydb')
>>> conn.close()
>>> try:
...   resultset = conn.execute("SELECT 1 FROM my_table LIMIT 1;")
... except sqlite3.ProgrammingError as e:
...   print e
Cannot operate on a closed database.

Это зависит от ярлыка, специфичного для sqlite3.

Ответ 2

Как убедиться, что соединение и курсор не закрыты?

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

Или оберните их в другие объекты, которые имеют реализацию перехода close(). Или добавьте элемент _isclosed, установленный close() и доступ к которому можно выполнить с помощью isclosed().