68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
|
|
"""数据库连接与会话管理模块"""
|
|||
|
|
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()
|