# 配置类 import os import sys from dataclasses import dataclass, field from typing import List, Optional # 添加项目根目录到Python路径 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) @dataclass class DatabaseConfig: """数据库配置""" host: str = "192.168.50.234" port: int = 4000 user: str = "root" password: str = "123456" database: str = "wind_data" charset: str = "utf8mb4" def get_connection_url(self) -> str: """获取SQLAlchemy连接URL""" return f"mysql+pymysql://{self.user}:{self.password}@{self.host}:{self.port}/{self.database}?charset={self.charset}" @dataclass class TableConfig: """表配置""" table_name: str = "data_scada_turbine" # 唯一键:id_farm + id_turbine + data_time unique_keys: List[str] = field(default_factory=lambda: ["id_farm", "id_turbine", "data_time"]) # 备用时间字段名(如果找不到data_time时使用) time_column_aliases: List[str] = field(default_factory=lambda: [ "data_time", "time", "timestamp", "datetime", "采集时间", "时间", "记录时间", "数据时间", "Time", "Timestamp" ]) @dataclass class AppConfig: """应用配置""" base_path: str = r"F:\BaiduNetdiskDownload\标准化数据\stander_parquet" max_workers: int = 20 # 线程池大小 batch_size: int = 1000 # 批量插入大小 upsert_enabled: bool = True # 启用UPSERT data_time_column: Optional[str] = None # 实际数据中的时间字段名 db_config: DatabaseConfig = None table_config: TableConfig = None def __post_init__(self): if self.db_config is None: self.db_config = DatabaseConfig() if self.table_config is None: self.table_config = TableConfig()