"""数据库连接与会话管理模块""" from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, declarative_base from app.config import settings # 处理兼容:如果设置了 DATABASE_URL(单数据库模式),则两个都使用它 if settings.DATABASE_URL: inventory_url = settings.DATABASE_URL pms_url = settings.DATABASE_URL else: inventory_url = settings.DATABASE_URL_INVENTORY pms_url = settings.DATABASE_URL_PMS # ============ 库存数据库(只读)============ engine_inventory = create_engine( inventory_url, pool_pre_ping=True, pool_size=5, max_overflow=10, # 库存数据库只读,不需要写入优化 ) SessionLocalInventory = sessionmaker(autocommit=False, autoflush=False, bind=engine_inventory) def get_db_inventory(): """获取库存数据库会话的依赖函数(只读)""" db = SessionLocalInventory() try: yield db finally: db.close() # ============ PMS 数据库(可读写)============ engine_pms = create_engine( pms_url, pool_pre_ping=True, pool_size=10, max_overflow=20, ) SessionLocalPMS = sessionmaker(autocommit=False, autoflush=False, bind=engine_pms) def get_db_pms(): """获取 PMS 数据库会话的依赖函数(可读写)""" db = SessionLocalPMS() try: yield db finally: db.close() # ============ 兼容旧接口 ============ # 为向后兼容提供默认的 engine 和 SessionLocal engine = engine_pms SessionLocal = SessionLocalPMS Base = declarative_base() def get_db(): """获取数据库会话的依赖函数(兼容旧接口,默认使用 PMS 数据库)""" yield from get_db_pms()