Стоит ли вручную закрывать соединение с базой данных, если используется управление контекстом (with-as)? - PullRequest
0 голосов
/ 31 октября 2018

Я учусь использовать базу данных PostgreSQL с модулем Python (3.6) psycopg2. У меня проблемы с определением, при каких обстоятельствах мне следует вручную закрывать свои соединения. Согласно документам :

в отличие от файловых объектов или других ресурсов, выход из соединения с блок не закрывает соединение, а только связанную транзакцию с ним: соединение может быть использовано в более чем с оператором и каждый с блоком эффективно упакован в отдельную транзакцию

Но потом приходит пример кода:

conn = psycopg2.connect(DSN)

with conn:
    with conn.cursor() as curs:
        curs.execute(SQL1)

with conn:
    with conn.cursor() as curs:
        curs.execute(SQL2)

conn.close()

Однако я привык видеть управление контекстом с помощью with-as, т.е. что-то вроде

with psycopg2.connect(DSN) as conn:
    with conn.cursor() as curs:
        curs.execute(SQL)

Это разумный подход, или все еще будет открытое соединение после выполнения вышеуказанного? Если это так, как мне закрыть его, поскольку «conn» больше не существует?

1 Ответ

0 голосов
/ 31 октября 2018

Согласно официальному документу: http://initd.org/psycopg/docs/connection.html#connection.close

Закрыть соединение сейчас (а не всякий раз, когда выполняется del) ....

Когда объект connection будет удален, он будет закрыт. Хотя я не нашел соответствующего исходного кода, так как все они написаны на C ++.

...