| """ | |
| Database connection and session management. | |
| Handles SQLAlchemy engine and session creation. | |
| """ | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.ext.declarative import declarative_base | |
| from sqlalchemy.orm import sessionmaker | |
| from app.config import settings | |
| # Create database engine | |
| # Echo=True shows SQL queries in console (useful for debugging) | |
| engine = create_engine( | |
| settings.database_url, | |
| echo=True if settings.environment == "development" else False, | |
| pool_pre_ping=True, # Verify connections before using | |
| pool_size=5, # Number of connections to keep | |
| max_overflow=10 # Maximum overflow connections | |
| ) | |
| # Create session factory | |
| SessionLocal = sessionmaker( | |
| autocommit=False, | |
| autoflush=False, | |
| bind=engine | |
| ) | |
| # Base class for all database models | |
| Base = declarative_base() | |
| def get_db(): | |
| """ | |
| Dependency that provides database session to route handlers. | |
| Automatically closes session after request completes. | |
| Usage: | |
| @app.get("/endpoint") | |
| def endpoint(db: Session = Depends(get_db)): | |
| # Use db here | |
| """ | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() |