supply_mysql.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from collections.abc import Generator
  2. from sqlalchemy import create_engine, text
  3. from sqlalchemy.engine import Engine
  4. from sqlalchemy.orm import Session, sessionmaker
  5. from app.core.config import settings
  6. _supply_engine: Engine | None = None
  7. _supply_session_local: sessionmaker[Session] | None = None
  8. def _ensure_supply_engine() -> sessionmaker[Session]:
  9. global _supply_engine, _supply_session_local
  10. if not settings.supply_mysql_configured:
  11. raise RuntimeError(
  12. "供需内容库未配置,请在 .env 中设置 SUPPLY_MYSQL_HOST、"
  13. "SUPPLY_MYSQL_USER、SUPPLY_MYSQL_PASSWORD、SUPPLY_MYSQL_DATABASE"
  14. )
  15. if _supply_session_local is None:
  16. _supply_engine = create_engine(
  17. settings.supply_mysql_dsn,
  18. pool_pre_ping=True,
  19. pool_recycle=3600,
  20. )
  21. _supply_session_local = sessionmaker(
  22. bind=_supply_engine,
  23. autoflush=False,
  24. autocommit=False,
  25. )
  26. return _supply_session_local
  27. def SupplySessionLocal() -> Session:
  28. return _ensure_supply_engine()()
  29. def get_supply_db_session() -> Generator[Session, None, None]:
  30. db = SupplySessionLocal()
  31. try:
  32. yield db
  33. finally:
  34. db.close()