Ошибка при выходе с базы данных

import psycopg2
from congif import host,user,password,db_name

try:
    con = psycopg2.connect(
        host = host,
        user = user,
        password = password,
        database = db_name
    )

    with con.cursor() as cursor:
        cursor.execute("SELECT version();")
        print(f'Server version: {cursor.fetchone()}')
except Exception as err:
    print('Error', err)
finally:
    con.close()
    print('[INFO] Connection closed')

Почему Выдает ошибку ?

NameError: name 'con' is not defined

Ответы (1 шт):

Автор решения: asanisimov

Вынесит инициализацию подключения выше (до блока try/except) и будет Вам счастье. Но даже так может возникнуть ошибка в подключении и con.close выдаст еще одну. Мой совет - оборачивать подключение в контекстный менеджер, как вы это сделали с курсором.


import psycopg2
from congif import host,user,password,db_name

try:

    with psycopg2.connect(
        host = host,
        user = user,
        password = password,
        database = db_name
    ) as con, con.cursor() as cursor:
        cursor.execute("SELECT version();")
        print(f'Server version: {cursor.fetchone()}')
except Exception as err:
    print('Error', err)


Либо обработать проблему упомянутую выше.



import psycopg2
from congif import host,user,password,db_name


con = None
try:
    con = psycopg2.connect(
        host = host,
        user = user,
        password = password,
        database = db_name
    )

    with con.cursor() as cursor:
        cursor.execute("SELECT version();")
        print(f'Server version: {cursor.fetchone()}')
except Exception as err:
    print('Error', err)
finally:
    if con:
        con.close()
        print('[INFO] Connection closed')
→ Ссылка