Не понимаю как исправить ошибку NameError: name 'connection' is not defined

Рейтинг: 0Ответов: 2Опубликовано: 13.07.2023

Начал изучать SQL, при попытке подключения к БД вылетает такая ошибка NameError: name 'connection' is not defined Предоставляю код:

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


def add_to_db():
    global connection
    try:
        connection = psycopg2.connect(host=host, user=user, password=password, database=db_name)

        with connection.cursor() as cursor:
            cursor.execute(f"SELECT * FROM records")
            connection.commit()
            result = cursor.fetchall()
            return result
    except Exception as _ex:
        print(f'[INFO] Error while working with PostgreSQL {_ex}')
    finally:
        if connection:
            connection.close()
            print(f'[INFO] PostgreSQL connection closed')

add_to_db()

Ответы

▲ 1Принят

Сейчас попробовал повторить данный код. И ошибка вылезает, когда введены неверные данные для подключения. Так что советую проверить логин/пароль/базу и тд. Место объявления connection никак не повлияло на выполнение.

▲ 2

У вас переменная connection создаётся внутри try а используется внутри finally так что надо её создать перед всем этим:

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


def add_to_db():
    global connection
    connection = None  # <--- Вот здесь

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

        with connection.cursor() as cursor:
            cursor.execute(f"SELECT * FROM records")
            connection.commit()
            result = cursor.fetchall()
            return result
    except Exception as _ex:
        print(f'[INFO] Error while working with PostgreSQL {_ex}')
    finally:
        if connection:
            connection.close()
            print(f'[INFO] PostgreSQL connection closed')

add_to_db()