将Salesforce数据转换为Python(简单 - Salesforce或salesforce-bulk)

时间:2017-10-03 18:40:01

标签: python salesforce simple-salesforce

我试图将Salesforce数据加载到Python数据框中,因此我们可以在那里进行所有操作。 simple_salesforce使用了我们达到2,000限制的警告:

from simple_salesforce import Salesforce as s
eatpies = sf.query('Select Id from Case')
attrs = ['Id']
records = eatpies['records']

data = {}

for rec in records:
    for k in attrs:
        data.setdefault(k, []).append(rec[k])

dframe = pd.DataFrame(data)

print(dframe)

据说,salesforce-bulk(https://pypi.python.org/pypi/salesforce-bulk/1.0.7)能够绕过这个限制,但我还能做得更远:

job = bulk.create_query_job("Case", contentType='CSV')
batch = bulk.query('select Id, type from Case')

TypeError                                 Traceback (most recent call last)
<ipython-input-13-076e14bf245d> in <module>()
----> 1 batch = bulk.query('select Id, type from Case')

TypeError: query() missing 1 required positional argument: 'soql'

请帮助,谢谢!如果解决方案可以在简单的Salesforce中完成,以超越Salesforce限制,那就太好了,但我无法通过Google找到任何解决方案。

2 个答案:

答案 0 :(得分:2)

更改行

eatpies = sf.query('Select Id from Case')

以下内容:

eatpies = sf.query_all('Select Id from Case')

方法query_all是query(...)query_more(...)附近的便捷包装。

来自文档:

  

如果由于特别大的结果,Salesforce会添加一个   nextRecordsUrl到您的查询结果,例如&#34; nextRecordsUrl&#34; :   &#34; /services/data/v26.0/query/01gD0000002HU6KIAW-2000" ;,你可以拉   使用ID或完整URL的其他结果(如果使用   完整网址,您必须通过&#39; True&#39;作为你的第二个论点)

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

您还可以通过simple-salesforce访问批量API。例如,替换

eatpies = sf.query('Select Id from Case')
attrs = ['Id']
records = eatpies['records']

以下内容:

eatpies = sf.bulk.Case.query('Select Id from Case')
attrs = ['Id']
records = eatpies

有关使用批量API的更多信息:https://github.com/simple-salesforce/simple-salesforce#using-bulk

答案 1 :(得分:0)

sf.query_all(“从访问者中选择CreatedDate> = 2017-12-01T00:00:00.000 + 0000和CreatedDate <2019-01-01T00:00:00.000 + 0000”的访问者的计数(Id),“真”)