"""数据库连接管理""" import os from typing import Generator from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, Session from app.core.config import get_config # 数据库配置 # 优先使用环境变量 DATABASE_URL # 格式:mysql+pymysql://user:password@host:port/database env_url = os.getenv("DATABASE_URL") if env_url: DATABASE_URL = env_url else: # 从 config.json 读取数据库配置 config = get_config() db_config = config.database DATABASE_URL = f"mysql+pymysql://{db_config.user}:{db_config.password}@{db_config.host}:{db_config.port}/{db_config.database}" # 创建数据库引擎 engine = create_engine( DATABASE_URL, pool_pre_ping=True, pool_size=10, max_overflow=20, ) # 会话工厂 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # 声明基类 Base = declarative_base() def get_db() -> Generator[Session, None, None]: """获取数据库会话(用于FastAPI依赖注入)""" db = SessionLocal() try: yield db finally: db.close() def init_db(): """初始化数据库(创建所有表)""" Base.metadata.create_all(bind=engine)