Попробуйте / поймать, чтобы закрыть соединение Postgres DB в Python - PullRequest
0 голосов
/ 30 сентября 2019

Мне сказали, что в настоящее время то, что у меня есть ниже, приведет к тому, что база данных останется открытой неопределенно долго, если возникнет ошибка. Как использовать оператор try catch, чтобы убедиться, что соединение закрывается при возникновении ошибки?

connection = psycopg2.connect(some_stuff_in_here)
print("Connected to DB")
cursor = connection.cursor()

if __name__ == '__main__':
   does_something()

cursor.close()
connection.close()
print("Disconnected from DB")

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

try:
   cursor.close()
   connection.close()
except:
   print("Database Process Error")
   cursor.close()
   connection.close()

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Соединение закроется, когда завершится процесс python. Если процесс python не является долго работающим демоном, беспокоиться не о чем.

Пытаться поймать это кажется бессмысленным. Если соединение отказывается закрываться в обычном режиме, что вы будете делать с этим в исключительном случае? Предположительно, он все еще там не закроется, так как ничего не изменилось. Единственный способ поймать это имеет смысл, если питон - это длительный процесс, а условие исключения приводит к прерыванию этого процесса, который в противном случае не произошел бы.

0 голосов
/ 30 сентября 2019

Вероятно, проще всего использовать соединение и курсор в качестве менеджеров контекста (оператор with):

Из документов:

with psycopg2.connect(your_stuff_in_here) as conn:
    with conn.cursor() as curs
        curs.execute('SELECT * FROM test')

Это автоматически очиститпосле любых ошибок. Если вам нужен более детальный контроль над ошибками, вы можете использовать try / catch / finally.

...