session.py 843 B

12345678910111213141516171819202122232425262728293031
  1. from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
  2. from alien_gateway.config import settings
  3. # 数据库引擎配置 (异步)
  4. # 注意:aiomysql 用于异步 MySQL 驱动
  5. DATABASE_URL = settings.SQLALCHEMY_DATABASE_URI.replace("mysql+pymysql", "mysql+aiomysql")
  6. engine = create_async_engine(
  7. DATABASE_URL,
  8. echo=True, # 开发环境开启 SQL 日志
  9. pool_pre_ping=True,
  10. pool_size=10,
  11. max_overflow=20
  12. )
  13. # 创建异步 Session 工厂
  14. AsyncSessionLocal = async_sessionmaker(
  15. bind=engine,
  16. class_=AsyncSession,
  17. expire_on_commit=False,
  18. )
  19. async def get_db():
  20. """
  21. FastAPI 依赖注入项,用于获取数据库 Session。
  22. """
  23. async with AsyncSessionLocal() as session:
  24. try:
  25. yield session
  26. finally:
  27. await session.close()