""" Database connection setup using SQLAlchemy. """ from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, declarative_base from contextlib import contextmanager from .config import settings # Create engine engine = create_engine( settings.database_url, pool_size=10, max_overflow=20, pool_pre_ping=True, # Verify connections before use echo=False, # Set to True for SQL debugging ) # Session factory SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # Base class for models Base = declarative_base() def get_db(): """ Dependency for FastAPI routes to get a database session. """ db = SessionLocal() try: yield db finally: db.close() @contextmanager def get_db_session(): """ Context manager for database sessions. Use in non-FastAPI contexts (scripts, etc). """ db = SessionLocal() try: yield db db.commit() except Exception: db.rollback() raise finally: db.close() def init_db(): """ Initialize database - create all tables. """ Base.metadata.create_all(bind=engine) def drop_db(): """ Drop all tables - use with caution! """ Base.metadata.drop_all(bind=engine)