feat(db): execute() + query_one() — INSERT/UPDATE/DELETE и единичный SELECT
- execute(sql, params) → (rowcount, error) — для INSERT/UPDATE/DELETE - query_one(sql, params) → (dict, error) — первая строка как словарь - авто-commit и rollback при ошибке
This commit is contained in:
+39
-1
@@ -7,7 +7,9 @@ DDL → schema.py. Бизнес-запросы → upload.py, extractor.py, api.
|
|||||||
Функции:
|
Функции:
|
||||||
_pg_connect(dbname) — сырое подключение к ЛЮБОЙ базе (используется /test createdb)
|
_pg_connect(dbname) — сырое подключение к ЛЮБОЙ базе (используется /test createdb)
|
||||||
connect() — подключение к ЦЕЛЕВОЙ базе (из DB_NAME)
|
connect() — подключение к ЦЕЛЕВОЙ базе (из DB_NAME)
|
||||||
query(sql, params) — выполнить запрос → (result, error)
|
query(sql, params) — выполнить SELECT → (result, error)
|
||||||
|
execute(sql, params) — выполнить INSERT/UPDATE/DELETE → (rowcount, error)
|
||||||
|
query_one(sql, params) — как query, но возвращает одну строку или None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -63,3 +65,39 @@ def query(sql_text, params=None):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
conn.close()
|
conn.close()
|
||||||
return None, str(e)
|
return None, str(e)
|
||||||
|
|
||||||
|
|
||||||
|
def execute(sql_text, params=None):
|
||||||
|
"""
|
||||||
|
Выполнить INSERT/UPDATE/DELETE к целевой БД.
|
||||||
|
Возвращает (rowcount, None) или (None, error).
|
||||||
|
"""
|
||||||
|
conn, err = connect()
|
||||||
|
if err:
|
||||||
|
return None, f"connect: {err}"
|
||||||
|
try:
|
||||||
|
cur = conn.cursor()
|
||||||
|
cur.execute(sql_text, params)
|
||||||
|
conn.commit()
|
||||||
|
rowcount = cur.rowcount
|
||||||
|
cur.close()
|
||||||
|
conn.close()
|
||||||
|
return rowcount, None
|
||||||
|
except Exception as e:
|
||||||
|
conn.rollback()
|
||||||
|
conn.close()
|
||||||
|
return None, str(e)
|
||||||
|
|
||||||
|
|
||||||
|
def query_one(sql_text, params=None):
|
||||||
|
"""
|
||||||
|
Выполнить SELECT и вернуть ПЕРВУЮ строку или None.
|
||||||
|
Возвращает (row_dict, None) или (None, error).
|
||||||
|
"""
|
||||||
|
result, err = query(sql_text, params)
|
||||||
|
if err:
|
||||||
|
return None, err
|
||||||
|
rows = result["rows"]
|
||||||
|
if not rows:
|
||||||
|
return None, None # нет строк — не ошибка
|
||||||
|
return dict(zip(result["columns"], rows[0])), None
|
||||||
|
|||||||
Reference in New Issue
Block a user