2026-09-07 17:20:42 +08:00
|
|
|
"""MySQL / Redis 连接工厂。"""
|
|
|
|
|
|
|
|
|
|
from functools import lru_cache
|
|
|
|
|
|
|
|
|
|
from sqlalchemy import create_engine
|
|
|
|
|
from sqlalchemy.engine import Engine
|
|
|
|
|
|
|
|
|
|
from app.config.settings import settings
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _mysql_url(database: str) -> str:
|
|
|
|
|
pwd = settings.mysql_password
|
|
|
|
|
auth = f"{settings.mysql_user}:{pwd}" if pwd else settings.mysql_user
|
|
|
|
|
return (
|
|
|
|
|
f"mysql+pymysql://{auth}@{settings.mysql_host}:{settings.mysql_port}"
|
|
|
|
|
f"/{database}?charset=utf8mb4"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@lru_cache
|
|
|
|
|
def get_agent_engine() -> Engine:
|
|
|
|
|
return create_engine(_mysql_url(settings.mysql_database), pool_pre_ping=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@lru_cache
|
|
|
|
|
def get_core_engine() -> Engine:
|
|
|
|
|
return create_engine(_mysql_url(settings.mysql_core_database), pool_pre_ping=True)
|