You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:36:19