Spaces:
Sleeping
Sleeping
| from sqlalchemy import create_engine | |
| from sqlalchemy.pool import QueuePool | |
| from sqlalchemy.orm import sessionmaker, Session | |
| from contextlib import contextmanager | |
| from typing import Generator | |
| from .config import settings | |
| from sqlmodel import SQLModel | |
| # Create the database engine with connection pooling | |
| engine = create_engine( | |
| settings.DATABASE_URL, | |
| poolclass=QueuePool, | |
| pool_size=5, | |
| max_overflow=10, | |
| pool_pre_ping=True, # Verify connections before use | |
| pool_recycle=300, # Recycle connections every 5 minutes | |
| echo=settings.DEBUG # Log SQL queries in debug mode | |
| ) | |
| # Create a SessionLocal class for database sessions | |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| def get_db_session() -> Generator[Session, None, None]: | |
| """ | |
| Generator function for FastAPI dependency injection. | |
| Provides database sessions and ensures they're properly closed. | |
| Yields: | |
| Session: Database session that will be automatically closed | |
| """ | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() | |
| def get_db() -> Generator[Session, None, None]: | |
| """ | |
| Context manager for database sessions. | |
| Ensures the database session is properly closed after use. | |
| """ | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() |