38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
import os
|
|
import psycopg2
|
|
from psycopg2 import sql
|
|
|
|
|
|
def connect():
|
|
"""Подключение к БД. Возвращает (connection, None) или (None, error)."""
|
|
try:
|
|
conn = psycopg2.connect(
|
|
host=os.getenv("DB_HOST"),
|
|
port=os.getenv("DB_PORT", 5432),
|
|
dbname=os.getenv("DB_NAME"),
|
|
user=os.getenv("DB_USER"),
|
|
password=os.getenv("DB_PASS"),
|
|
sslmode=os.getenv("DB_SSLMODE", "disable"),
|
|
)
|
|
return conn, None
|
|
except Exception as e:
|
|
return None, str(e)
|
|
|
|
|
|
def query(sql_text, params=None):
|
|
"""Выполнить запрос, вернуть (result, error)."""
|
|
conn, err = connect()
|
|
if err:
|
|
return None, f"connect: {err}"
|
|
try:
|
|
cur = conn.cursor()
|
|
cur.execute(sql_text, params)
|
|
rows = cur.fetchall()
|
|
cols = [desc[0] for desc in cur.description] if cur.description else []
|
|
cur.close()
|
|
conn.close()
|
|
return {"columns": cols, "rows": [list(r) for r in rows]}, None
|
|
except Exception as e:
|
|
conn.close()
|
|
return None, str(e)
|