""" 数据同步抽象基类 """ import abc from datetime import datetime from core.logger import LogLevel, PrintLog class BaseSync(abc.ABC): """数据同步抽象基类,所有同步操作遵循 _fetch → _upsert 模式""" def __init__(self): self.stats = {'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0} def run(self, **kwargs) -> dict: """同步入口: 拉取数据 → 写入数据库 → 返回统计""" name = self.__class__.__name__ PrintLog(LogLevel.INFO, f'[sync] {name} 开始同步...') t0 = datetime.now() try: data = self._fetch(**kwargs) self._upsert(data) elapsed = (datetime.now() - t0).total_seconds() PrintLog( LogLevel.INFO, f'[sync] {name} 完成 ({elapsed:.1f}s) — ' f'insert={self.stats["inserted"]} update={self.stats["updated"]} ' f'skip={self.stats["skipped"]} err={self.stats["errors"]}' ) except Exception as e: PrintLog(LogLevel.ERROR, f'[sync] {name} 失败: {e}') raise return self.stats @abc.abstractmethod def _fetch(self, **kwargs): """从数据源拉取原始数据。子类实现。""" @abc.abstractmethod def _upsert(self, data): """将数据写入数据库。子类实现。"""