【问题标题】:Unable to fetch complete records from Salesforce using Python无法使用 Python 从 Salesforce 获取完整记录
【发布时间】:2019-12-26 15:42:23
【问题描述】:

我正在尝试使用 python 中的 simple_salesforce 库从 salesforce 获取数据。

我能够在运行计数查询时获得正确的记录计数。

但是,当我尝试将结果(以列表的形式)作为 JSON 对象放入 s3 时,并没有像我从 Salesforce 捕获的那样持久化记录。

这是一段代码:

result = sf.query("SELECT ID FROM Opportunity")['records']
object.put(Body=(bytes(json.dumps(result, indent=2).encode('UTF-8'))))

是 Salesforce 方面的问题还是我在使用 AWS 的 SDK 将对象放入 S3 时遇到了问题?

【问题讨论】:

  • 您能否向我们展示您预期的确切数据以及您获得的确切数据?

标签: python python-3.x amazon-s3 salesforce aws-sdk


【解决方案1】:

Salesforce API returns stuff in chunks,默认为一次 2000 条记录。如果它返回给你 1M 记录它可能会杀死你的内存使用。检索一个块,处理它(保存到文件?),请求下一个块。

直接在project's homepage:

如果由于结果特别大,Salesforce 添加了一个 nextRecordsUrl 到您的查询结果,例如 "nextRecordsUrl" : “/services/data/v26.0/query/01gD0000002HU6KIAW-2000”,可以拉取 带有 ID 或完整 URL 的附加结果(如果使用 完整的 URL,你必须传递 ‘True’ 作为你的第二个参数)

sf.query_more("01gD0000002HU6KIAW-2000")
sf.query_more("/services/data/v26.0/query/01gD0000002HU6KIAW-2000", True)

为方便起见,在单个本地检索所有结果 方法调用使用

sf.query_all("SELECT Id, Email FROM Contact WHERE LastName = 'Jones'")

【讨论】:

  • 感谢您的回答。但我有大约 40,000 条记录,并且偏移量也仅适用于 2000 条记录。因此,一旦获取了第一个块,即 1 到 2000 条记录(或保存在某个文件中),那么如何获取下一个块。
  • 不,不是偏移量。 SELECT ... LIMIT 2000 OFFSET 2000 更改您的查询和结果集。当您有更大的查询时,销售人员会在底层 Oracle 数据库中打开一个“光标”,您可以随身携带(API 查询仅向前,但在 Apex 代码中,您可以转到下一页、上一页、第一页、最后一页……)。真的,请查看此nextRecordsUrl 的 SF REST API 文档。或者sf.query_all
猜你喜欢
  • 2022-08-24
  • 2019-03-06
  • 1970-01-01
  • 2019-09-18
  • 2022-08-23
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多