SmartEDT/backend/database/engine.py

25 lines
816 B
Python
Raw Permalink Normal View History

"""数据库引擎与 Session 工厂。
集中封装 SQLAlchemy async engine async_sessionmaker 的创建逻辑便于在主程序中统一注入
"""
from __future__ import annotations
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker, create_async_engine
from backend.config.settings import DatabaseSettings
def create_engine(settings: DatabaseSettings) -> AsyncEngine:
"""根据配置创建 AsyncEngine。"""
return create_async_engine(
settings.url,
pool_pre_ping=True,
future=True,
)
def create_session_factory(engine: AsyncEngine) -> async_sessionmaker[AsyncSession]:
"""创建异步 Session 工厂expire_on_commit=False 便于返回已提交对象)。"""
return async_sessionmaker(engine, expire_on_commit=False)