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

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

import sqlite3

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

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

2 ответов


вы можете обернуть в 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.


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

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

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