db_config_loader.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from urllib.parse import quote_plus
  2. from typing import Dict, Any
  3. from core.settings import db_settings
  4. class DBConfigLoader:
  5. """
  6. 数据库配置加载器
  7. 负责加载和处理数据库配置,与数据库连接管理分离
  8. """
  9. @classmethod
  10. def get_db_config(cls, db_name: str | None = None) -> Dict[str, Any]:
  11. """
  12. 获取指定数据库的配置
  13. :param db_name: 数据库名称,如果为None则返回默认数据库配置
  14. :return: 数据库配置字典
  15. """
  16. return db_settings.databases[db_name] if db_name else db_settings.databases['default']
  17. @classmethod
  18. def build_connection_url(cls, config: Dict[str, Any]) -> str:
  19. """
  20. 根据配置构建数据库连接URL
  21. :param config: 数据库配置字典
  22. :return: 连接URL字符串
  23. """
  24. db_type = config['type']
  25. driver = 'asyncmy' if db_type == 'mysql' else 'asyncpg'
  26. # 构建数据库连接URL
  27. url = (
  28. f"{db_type}+{driver}://{config['username']}:{quote_plus(config['password'])}@"
  29. f"{config['host']}:{config['port']}/{config['database']}"
  30. )
  31. return url
  32. @classmethod
  33. def get_engine_params(cls, config: Dict[str, Any]) -> Dict[str, Any]:
  34. """
  35. 获取创建引擎所需的参数
  36. :param config: 数据库配置字典
  37. :return: 引擎参数字典
  38. """
  39. return {
  40. 'echo': config['echo'],
  41. 'max_overflow': config['max_overflow'],
  42. 'pool_size': config['pool_size'],
  43. 'pool_recycle': config['pool_recycle'],
  44. 'pool_timeout': config['pool_timeout']
  45. }