from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from .config import get_settings settings = get_settings() def build_db_url() -> str: if settings.db_type == "postgresql": return ( f"postgresql+psycopg2://{settings.db_user}:{settings.db_password}" f"@{settings.db_host}:{settings.db_port}/{settings.db_name}" ) return ( f"mysql+pymysql://{settings.db_user}:{settings.db_password}" f"@{settings.db_host}:{settings.db_port}/{settings.db_name}" "?charset=utf8mb4" ) engine = create_engine( build_db_url(), echo=settings.db_echo, pool_pre_ping=True, ) SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False) def get_db(): db = SessionLocal() try: yield db finally: db.close()