""" 数据库连接和会话管理 """ from sqlalchemy import create_engine from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker from sqlalchemy.orm import sessionmaker from config.settings import settings # 创建异步引擎 # 将数据库URL转换为asyncmy驱动(用于异步操作) # 首先尝试pymysql到asyncmy的转换,如果失败则尝试mysql到mysql+asyncmy的转换 if 'mysql+pymysql' in settings.DATABASE_URL: async_db_url = settings.DATABASE_URL.replace('mysql+pymysql', 'mysql+asyncmy') else: async_db_url = settings.DATABASE_URL.replace('mysql', 'mysql+asyncmy') async_engine = create_async_engine( async_db_url, echo=settings.DEBUG, pool_pre_ping=True ) # 创建会话工厂 AsyncSessionLocal = async_sessionmaker( bind=async_engine, class_=AsyncSession, expire_on_commit=False ) async def get_db(): """获取数据库会话的依赖函数""" async with AsyncSessionLocal() as session: try: yield session await session.commit() except Exception: await session.rollback() raise finally: await session.close()