| 12345678910111213141516171819202122232425262728293031323334353637 |
- """PG 连接基建:连 open_aigc(Greenplum / PG12 内核),供只读查询复用。
- 目前唯一用途是分类树 dump(scripts/dump_trees.py 查 public.global_category)。
- 连接 / 参数化风格对齐 ContentFindAgentNew 的 database_runtime.py。
- """
- from __future__ import annotations
- from typing import Any
- import psycopg2
- import psycopg2.extras
- from core.config import PgConfig
- def connect(cfg: PgConfig, schema: str | None = None) -> Any:
- """建连;schema 缺省用 cfg.schema,可显式传 public 查全局分类树。"""
- return psycopg2.connect(
- host=cfg.host,
- port=cfg.port,
- user=cfg.user,
- password=cfg.password,
- dbname=cfg.database,
- connect_timeout=cfg.timeout,
- options=f"-c search_path={schema or cfg.schema}",
- )
- def fetch_all(cfg: PgConfig, sql: str, params: tuple = (), schema: str | None = None) -> list[dict]:
- """只读查询,返回 dict 列表。"""
- conn = connect(cfg, schema)
- try:
- with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as cur:
- cur.execute(sql, params)
- return [dict(r) for r in cur.fetchall()]
- finally:
- conn.close()
|