如何通过Python API按日期筛选获取ServiceNow近两日更新的记录
ServiceNow API 仅拉取近2天更新记录的实现方案
原有问题
当前调用ServiceNow API的Python脚本默认拉取全量记录,数据量增长后需要增加时间筛选逻辑,仅返回过去2天内更新的记录,原有请求代码如下:
params_list = { 'sysparm_exclude_reference_link': 'true', 'sysparm_query': 'ORDERBYsys_created_on', 'sysparm_fields': fields, 'sysparm_display_value':'true' } res = requests.get(URL_request, auth=HTTPBasicAuth(params.username, params.password), params=params_list)
实现逻辑
ServiceNow REST API的所有筛选规则都通过sysparm_query参数传递,无需修改请求结构,直接在现有查询语句中拼接时间筛选条件即可:
- 时间筛选使用
sys_updated_on(记录更新时间)字段,配合>=操作符匹配时间晚于临界值的记录 - ServiceNow存储的所有时间字段均为UTC时区,临界时间需要按UTC计算,格式要求为
yyyy-MM-dd HH:mm:ss - 多个查询条件之间用
^符号拼接,原有排序规则保留在查询语句末尾即可
调整后可直接运行的代码
from datetime import datetime, timedelta import requests from requests.auth import HTTPBasicAuth # 动态计算2天前的UTC时间,匹配ServiceNow接口的时间格式要求 two_days_ago_utc = (datetime.utcnow() - timedelta(days=2)).strftime("%Y-%m-%d %H:%M:%S") params_list = { 'sysparm_exclude_reference_link': 'true', # 拼接更新时间筛选条件,保留原有的按创建时间排序逻辑 'sysparm_query': f'sys_updated_on>={two_days_ago_utc}^ORDERBYsys_created_on', 'sysparm_fields': fields, 'sysparm_display_value': 'true' } res = requests.get(URL_request, auth=HTTPBasicAuth(params.username, params.password), params=params_list)
补充说明
- 如果需要筛选的是近2天新创建的记录,只需要把查询条件里的
sys_updated_on替换为sys_created_on - 不要使用本地时区时间计算临界值,跨时区部署时会出现筛选结果不准的问题,必须使用UTC时间
- 如果筛选后的结果量仍然较大,可以增加
sysparm_limit参数设置单页返回的最大记录数,避免请求超时
如果需要固定时间范围的筛选,直接把代码里动态计算的
two_days_ago_utc替换为目标时间字符串即可,其余逻辑无需改动。
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

