"""工作单元(Unit of Work):统一事务边界。 使用方式: async with get_uow() as uow: await uow.session.get(Match, 1) await uow.commit() """ from __future__ import annotations from collections.abc import AsyncIterator from contextlib import asynccontextmanager from src.db.base import AsyncSessionLocal @asynccontextmanager async def get_uow() -> AsyncIterator[AsyncSessionLocal]: """创建新的工作单元(用于非路由上下文)。 用法: async with get_uow() as session: await session.get(...) # 退出时自动 commit(无异常) 或 rollback(有异常) """ session = AsyncSessionLocal() try: yield session await session.commit() except Exception: await session.rollback() raise finally: await session.close()