Platform bundle: marketing publish, IT ops, packaging, agents mesh.
Volledige Foodlinkk Command Center uitbreiding met social automatisering, reclamefolder filters, Proxmox monitoring en documentatie.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import os
|
||||
|
||||
import psycopg2
|
||||
from psycopg2.extras import RealDictCursor
|
||||
|
||||
_pool = None
|
||||
|
||||
|
||||
def init_pool() -> None:
|
||||
global _pool
|
||||
if _pool is None:
|
||||
_pool = {
|
||||
"host": os.getenv("DB_HOST", "10.4.7.18"),
|
||||
"user": os.getenv("DB_USER", "aissa"),
|
||||
"password": os.getenv("DB_PASSWORD", "Foodlinkk#2026"),
|
||||
"dbname": os.getenv("DB_NAME", "foodlinkk"),
|
||||
}
|
||||
|
||||
|
||||
def _conn():
|
||||
init_pool()
|
||||
return psycopg2.connect(**_pool, cursor_factory=RealDictCursor)
|
||||
|
||||
|
||||
def fetch_one(sql: str, params: tuple = ()) -> dict | None:
|
||||
with _conn() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(sql, params)
|
||||
row = cur.fetchone()
|
||||
conn.commit()
|
||||
return dict(row) if row else None
|
||||
|
||||
|
||||
def fetch_all(sql: str, params: tuple = ()) -> list:
|
||||
with _conn() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(sql, params)
|
||||
rows = cur.fetchall()
|
||||
conn.commit()
|
||||
return [dict(r) for r in rows]
|
||||
|
||||
|
||||
def execute_returning(sql: str, params: tuple = ()) -> dict:
|
||||
with _conn() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(sql, params)
|
||||
row = cur.fetchone()
|
||||
conn.commit()
|
||||
return dict(row) if row else {}
|
||||
Reference in New Issue
Block a user