database.py 787 B

123456789101112131415161718192021222324252627282930313233343536
  1. from collections.abc import AsyncGenerator
  2. from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
  3. from sqlalchemy.orm import DeclarativeBase
  4. from .config import get_settings
  5. settings = get_settings()
  6. engine = create_async_engine(
  7. settings.database_url,
  8. echo=settings.debug,
  9. pool_pre_ping=True,
  10. pool_size=10,
  11. max_overflow=20,
  12. pool_recycle=3600,
  13. )
  14. async_session_factory = async_sessionmaker(
  15. bind=engine,
  16. class_=AsyncSession,
  17. expire_on_commit=False,
  18. autoflush=False,
  19. )
  20. class Base(DeclarativeBase):
  21. pass
  22. async def get_db() -> AsyncGenerator[AsyncSession, None]:
  23. async with async_session_factory() as session:
  24. try:
  25. yield session
  26. finally:
  27. await session.close()