"with psycopg2.connect" это автоматически закрывает соединение? - PullRequest
0 голосов
/ 07 января 2019

Я использую библиотеку psycopg2 для обработки соединения с базой данных Postgress.

Сравнимы ли следующие два подхода к обработке соединения БД?

Фрагмент 1:

cnx = connect(user=<...>, password=<...>, host=<...>, database=<...>)
cursor = cnx.cursor()
cursor.execute(sql)
cnx.close()

Снипет 2:

with psycopg2.connect(user=<...>, password=<...>, host=<...>, database=<...>) as cnx:
    cursor = cnx.cursor()
    cursor.execute(sql)

Мне особенно интересно, если использование WITH автоматически закрывает соединение? Мне сообщили, что второй подход предпочтительнее, потому что он автоматически закрывает соединение. Тем не менее, когда я тестирую его с помощью cnx.closed, он показывает открытое соединение.

1 Ответ

0 голосов
/ 07 января 2019

Блок with пытается при выходе закрыть (зафиксировать) транзакцию, а не соединение. Для документации:

Обратите внимание, что, в отличие от файловых объектов или других ресурсов, выход из соединения с блоком не закрывает соединение, а только транзакцию, связанную с ним [...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...