Files
contracts-app/site/db.py
T

37 lines
1.1 KiB
Python

import os
import psycopg2
from psycopg2 import sql
def connect():
"""Подключение к БД. Возвращает connection или None."""
try:
return 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"),
)
except Exception:
return None
def query(sql_text, params=None):
"""Выполнить запрос, вернуть (rows, columns) или (None, error)."""
conn = connect()
if not conn:
return None, "no connection"
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)