如何从Python配置文件自动获取最近5天API增量数据
自动获取最近5天增量数据的SQL配置问题
当前配置文件片段
[ { "id" : 123, "input":{ "name" : "", "path" : "", "format": "", "paramters":{ "table_name" : "test" }, "query" : "select * from test where type_id='1234' and time>= '2023-04-20T00:46:26+00:00'" } } ]
需求与问题
目前需要手动修改SQL查询中的时间参数才能获取增量数据,希望实现无需手动改日期、自动拉取最近5天数据的效果。尝试过以下两种写法均无输出:
time >= 'DATE(NOW())-INTERVAL 7 DAY'time = DateDiff(left(time,19), today(), day) <5(理论逻辑可行,但无法在Python中正常传递)
解决方法
方案1:直接使用数据库原生日期函数(推荐)
之前的写法错误在于把日期函数用单引号包裹,导致数据库将其当作普通字符串而非可执行逻辑。去掉单引号,根据你的数据库类型选择对应写法:
MySQL/MariaDB 版本
如果time字段是UTC时区:
select * from test where type_id='1234' and time >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 5 DAY)
如果是本地时区:
select * from test where type_id='1234' and time >= DATE_SUB(NOW(), INTERVAL 5 DAY)
PostgreSQL 版本
UTC时区兼容写法:
select * from test where type_id='1234' and time >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '5 days'
本地时区写法:
select * from test where type_id='1234' and time >= NOW() - INTERVAL '5 days'
将上述SQL直接替换配置文件中的query字段即可,无需手动修改日期。
方案2:Python侧计算日期后注入SQL
如果API不支持解析SQL中的函数,可在Python脚本中动态计算时间并替换配置:
import json from datetime import datetime, timedelta # 加载配置文件 with open('config.json', 'r') as f: config = json.load(f) # 生成5天前的UTC时间,格式匹配原SQL five_days_ago = (datetime.utcnow() - timedelta(days=5)).strftime('%Y-%m-%dT%H:%M:%S+00:00') # 替换SQL中的时间条件 for item in config: item['input']['query'] = item['input']['query'].replace( "time>= '2023-04-20T00:46:26+00:00'", f"time>= '{five_days_ago}'" ) # 用修改后的配置调用API # your_api_call(config)
每次运行脚本时,会自动计算最近5天的时间并更新SQL,无需手动修改配置文件。
内容的提问来源于stack exchange,提问作者arty123
相关产品推荐
相关产品推荐

