调用ml.googleapis.com API时如何正确设置日期范围过滤条件
错误原因
project_id格式化语法错误:原代码中占位符写为a而非{},导致传入的项目ID没有实际生效,最终project_id值固定为错误的projects/afilter参数写法不符合规范:- 用Python原生
and运算符连接两个字符串,实际运行时只会返回第二个字符串作为filter值,两个过滤条件没有同时生效 - 不符合Google ML API的filter语法规则:多条件需要写在同一字符串内,用大写
AND连接,时间值需要用双引号包裹,建议追加Z标识为UTC时间避免时区偏移问题
- 用Python原生
正确代码示例
from googleapiclient import discovery from googleapiclient import errors # 正确格式化项目ID project_id = 'projects/{}'.format('gcp-scj3-host-scj-core-01') ml = discovery.build('ml', 'v1') # 符合API规范的过滤条件写法 filter_str = 'createTime >= "2021-10-21T12:00:00Z" AND createTime <= "2021-10-22T12:00:00Z"' request = ml.projects().jobs().list(parent=project_id, filter=filter_str) response = request.execute() # 提取所需字段 for job in response.get('jobs', []): job_id = job.get('jobId') args = job.get('trainingInput', {}).get('args', []) state = job.get('state') print(job_id, args, state)
定时任务动态日期适配方案
如果是每日运行的定时任务,可通过datetime模块自动生成对应时间段的时间字符串:
from datetime import datetime, timedelta # 示例:取昨天0点到今天0点的UTC时间范围 end_time = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0) start_time = end_time - timedelta(days=1) # 格式化为API要求的格式 start_str = start_time.isoformat() + "Z" end_str = end_time.isoformat() + "Z" filter_str = f'createTime >= "{start_str}" AND createTime <= "{end_str}"'
内容的提问来源于stack exchange,提问作者Maa
相关产品推荐
相关产品推荐

