Работа с базой PostreSQL на Python

import psycopg2

from config import host, user, password, db_name, port

try:

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


    with connection.cursor() as cursor:
        cursor.execute(
            "SELECT 'test;"
        )

    print(f'Server version: {cursor.fetchone()}')


except Exception as _error:
    print("[INFO] Error while working PostgreSQL:", _error)
finally:
    if connection:
        connection.close()
        print('[INFO] PostgreSQL connection closed')

Сорян за неудобную форму отображения кода, не получилось вставить цельным куском.

Вывод в консоль при запуске кода:

[INFO] Error while working PostgreSQL: 'utf-8' codec can't decode byte 0xc2 in position 55: invalid continuation byte
Traceback (most recent call last):
  File "d:\Projects\BackendPath\FastAPI\testbd.py", line 27, in <module>
    if connection:
       ^^^^^^^^^^
NameError: name 'connection' is not defined

Что находится в файле config.py:

host = "127.0.0.1"
user = "postgres"
password = "1234"
db_name = "example"
port = 5432

В чем заключается ошибка и как ее починить?


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

Автор решения: Sergey Gornostaev

Просто используйте ещё один блок with

kwargs = dict(
    host=host,
    user=user,
    password=password,
    database=db_name,
    port=port,
)

with psycopg2.connect(**kwargs) as connection:
    with connection.cursor() as cursor:
        cursor.execute(
            "SELECT 'test';"
        )

    print(f'Server version: {cursor.fetchone()}')

try-catch вам не нужен, но если очень хотите, то можете обернуть, просто без закрытия connection в finally.

→ Ссылка