config.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # 配置类
  2. import os
  3. import sys
  4. from dataclasses import dataclass, field
  5. from typing import List, Optional
  6. # 添加项目根目录到Python路径
  7. sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  8. @dataclass
  9. class DatabaseConfig:
  10. """数据库配置"""
  11. host: str = "192.168.50.234"
  12. port: int = 4000
  13. user: str = "root"
  14. password: str = "123456"
  15. database: str = "wind_data"
  16. charset: str = "utf8mb4"
  17. def get_connection_url(self) -> str:
  18. """获取SQLAlchemy连接URL"""
  19. return f"mysql+pymysql://{self.user}:{self.password}@{self.host}:{self.port}/{self.database}?charset={self.charset}"
  20. @dataclass
  21. class TableConfig:
  22. """表配置"""
  23. table_name: str = "data_scada_turbine"
  24. # 唯一键:id_farm + id_turbine + data_time
  25. unique_keys: List[str] = field(default_factory=lambda: ["id_farm", "id_turbine", "data_time"])
  26. # 备用时间字段名(如果找不到data_time时使用)
  27. time_column_aliases: List[str] = field(default_factory=lambda: [
  28. "data_time", "time", "timestamp", "datetime", "采集时间",
  29. "时间", "记录时间", "数据时间", "Time", "Timestamp"
  30. ])
  31. @dataclass
  32. class AppConfig:
  33. """应用配置"""
  34. base_path: str = r"F:\BaiduNetdiskDownload\标准化数据\stander_parquet"
  35. max_workers: int = 20 # 线程池大小
  36. batch_size: int = 1000 # 批量插入大小
  37. upsert_enabled: bool = True # 启用UPSERT
  38. data_time_column: Optional[str] = None # 实际数据中的时间字段名
  39. db_config: DatabaseConfig = None
  40. table_config: TableConfig = None
  41. def __post_init__(self):
  42. if self.db_config is None:
  43. self.db_config = DatabaseConfig()
  44. if self.table_config is None:
  45. self.table_config = TableConfig()