Python API V3与Salesforce Rest API返回记录数不一致问题排查
问题分析:SFDC查询返回记录数不一致排查
问题描述
我基于V2版本开发了V3版本的Python API,除部分数据查询逻辑外其余代码均保持一致,且两个版本的WHERE子句完全相同。直接在Salesforce(SFDC)中执行查询时返回记录数一致,但V3 API返回125条记录、V2返回250条记录,请问该问题与SFDC还是Python API相关?
相关代码片段
response = client.post("/composite", data=body, **kwargs) records = [] for r in response.get("compositeResponse", ()): if r["httpStatusCode"] >= 300: continue if flatten: for rec in r["body"]["records"]: records.append(rec) else: records.append(r["body"]["records"]) return records
注:此处的client为sfdclib.rest.SfdcRestApi对象
结论与排查方向
- 排除SFDC端问题:直接在SFDC中执行相同WHERE子句的查询返回记录数一致,说明SFDC的数据、查询语法本身没有问题,问题不在SFDC侧。
- 锁定Python API V3版本的差异:
- 检查
flatten参数取值:对比V2与V3版本中该参数的设置是否一致?如果V3的flatten为False,代码会将每个子查询的结果列表直接追加到最终records中(形成嵌套列表),若统计时误取外层列表长度而非平铺后的记录总数,会出现数量减半的情况;反之若V2是True、V3是False,就会导致返回的"记录数"统计差异。 - 检查复合请求的子查询数量:对比V2和V3版本中
body里包含的子查询个数,若V3只发送了一半数量的子查询,自然会得到一半的记录数。 - 检查错误跳过逻辑:查看V3版本的
compositeResponse中是否有更多子查询返回了>=300的HTTP状态码,被代码中的continue语句跳过,导致这部分记录未被计入最终结果。
- 检查
结论:该问题与SFDC无关,完全是Python API V3版本的实现差异导致。
内容的提问来源于stack exchange,提问作者Trippy_Samurai
相关产品推荐
相关产品推荐

