Работа с базой 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.