database.py 678 B

1234567891011121314151617181920212223242526272829303132333435
  1. from sqlalchemy import create_engine
  2. from sqlalchemy.orm import sessionmaker, DeclarativeBase
  3. from typing import Generator
  4. from app.config import get_settings
  5. settings = get_settings()
  6. engine = create_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=900,
  13. pool_timeout=30,
  14. )
  15. SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
  16. class Base(DeclarativeBase):
  17. pass
  18. def get_db() -> Generator:
  19. db = SessionLocal()
  20. try:
  21. yield db
  22. db.commit()
  23. except Exception:
  24. db.rollback()
  25. raise
  26. finally:
  27. db.close()