session.py 867 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from __future__ import annotations
  2. from collections.abc import Generator
  3. from sqlalchemy import create_engine
  4. from sqlalchemy.orm import Session, sessionmaker
  5. from app.core.config import settings
  6. if settings.database_dialect.strip().lower() == "sqlite":
  7. settings.sqlite_file.parent.mkdir(parents=True, exist_ok=True)
  8. connect_args = (
  9. {"check_same_thread": False}
  10. if settings.database_dialect.strip().lower() == "sqlite"
  11. else {}
  12. )
  13. engine = create_engine(
  14. settings.database_url,
  15. echo=settings.database_echo,
  16. pool_pre_ping=True,
  17. connect_args=connect_args,
  18. )
  19. SessionLocal = sessionmaker(
  20. bind=engine,
  21. class_=Session,
  22. autoflush=False,
  23. autocommit=False,
  24. expire_on_commit=False,
  25. )
  26. def get_db() -> Generator[Session, None, None]:
  27. db = SessionLocal()
  28. try:
  29. yield db
  30. finally:
  31. db.close()