from fastapi import APIRouter, Depends, HTTPException, Query from typing import Optional from psycopg import AsyncConnection from .database import get_database_instance from .scada_info import ScadaRepository router = APIRouter(prefix="/postgresql", tags=["postgresql"]) # 创建支持数据库选择的连接依赖函数 async def get_database_connection( db_name: Optional[str] = Query( None, description="指定要连接的数据库名称,为空时使用默认数据库" ) ): """获取数据库连接,支持通过查询参数指定数据库名称""" instance = await get_database_instance(db_name) async with instance.get_connection() as conn: yield conn @router.get("/scada-info") async def get_scada_info_with_connection( conn: AsyncConnection = Depends(get_database_connection), ): """ 使用连接池查询所有SCADA信息 """ try: # 使用ScadaRepository查询SCADA信息 scada_data = await ScadaRepository.get_scadas_info(conn) return {"success": True, "data": scada_data, "count": len(scada_data)} except Exception as e: raise HTTPException( status_code=500, detail=f"查询SCADA信息时发生错误: {str(e)}" )