from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker import os from dotenv import load_dotenv # Load environment variables load_dotenv() # Database configuration DATABASE_HOST = os.getenv("DATABASE_HOST", "localhost") DATABASE_PORT = os.getenv("DATABASE_PORT", "3306") DATABASE_NAME = os.getenv("DATABASE_NAME", "audio") DATABASE_USER = os.getenv("DATABASE_USER", "root") DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD", "root123") # Create database URL (only charset parameter) DATABASE_URL = f"mysql+pymysql://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}?charset=utf8mb4" # Create engine with additional connection arguments # Use connect_args for parameters that shouldn't be in the URL engine = create_engine( DATABASE_URL, echo=os.getenv("DEBUG", "False") == "True", connect_args={} ) # Create session factory SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # Base class for models Base = declarative_base() def get_db(): """Database session dependency""" db = SessionLocal() try: yield db finally: db.close()