如何持久化变量供下次读取并对比运行日期更新批次ID
解决方案:持久化运行日期与日期对比逻辑
一、持久化变量(保存上次运行日期)
最简单的方式是用文件存储状态,推荐两种实用方案:
方案1:纯文本文件(适合单变量存储)
用文本文件直接存储日期的ISO格式字符串(如2024-05-20),脚本启动时读取历史日期,运行结束后更新:
from datetime import date # 自定义存储文件路径,可按需修改 LAST_RUN_FILE = "last_run_date.txt" curr_date = date.today() # 读取上次运行日期,处理首次运行场景 try: with open(LAST_RUN_FILE, "r") as f: run_date_str = f.read().strip() run_date = date.fromisoformat(run_date_str) except FileNotFoundError: # 首次运行时,默认将run_date设为当日 run_date = curr_date
方案2:JSON文件(适合多变量存储,比如同时保存batch_id)
如果需要同时维护batch_id这类状态,用JSON文件存储更规整:
import json from datetime import date STATE_FILE = "script_state.json" curr_date = date.today() # 读取历史状态 try: with open(STATE_FILE, "r") as f: state_data = json.load(f) run_date = date.fromisoformat(state_data["run_date"]) batch_id = state_data["batch_id"] except (FileNotFoundError, KeyError): # 首次运行初始化状态 run_date = curr_date batch_id = 0
二、日期对比与batch_id更新
datetime.date对象支持直接用比较运算符(>/</==)对比,底层按年、月、日的顺序判断大小,完全匹配你的需求:
# 执行日期对比逻辑 if curr_date > run_date: batch_id += 1
三、运行结束后更新状态
无论用哪种存储方案,脚本运行完成后都要把当前日期(和更新后的batch_id)写回文件:
纯文本文件更新:
with open(LAST_RUN_FILE, "w") as f: f.write(curr_date.isoformat())
JSON文件更新:
# 组装最新状态 new_state = { "run_date": curr_date.isoformat(), "batch_id": batch_id } with open(STATE_FILE, "w") as f: json.dump(new_state, f)
关键说明
- 无需使用
wait方法,脚本通过定时任务每日执行,每次启动时直接读取历史状态即可完成判断。 - 首次运行时,
run_date与curr_date一致,不会触发batch_id递增;后续每日运行时,curr_date会大于run_date(定时任务每日执行,run_date为前一天日期),自动实现batch_id递增逻辑。
内容的提问来源于stack exchange,提问作者Mayank Singh
相关产品推荐
相关产品推荐

