Mar*_* Gu 5 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)
Run Code Online (Sandbox Code Playgroud)
据说, 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'
Run Code Online (Sandbox Code Playgroud)
请帮忙,谢谢!如果解决方案可以在 simple-Salesforce 中完成以克服 Salesforce 的限制,那就太好了,但我无法通过 Google 找到任何解决方案。
小智 6
换线
eatpies = sf.query('Select Id from Case')
Run Code Online (Sandbox Code Playgroud)
至以下内容:
eatpies = sf.query_all('Select Id from Case')
Run Code Online (Sandbox Code Playgroud)
方法 query_all 是query(...)和的便捷包装器query_more(...)。
来自文档:
如果由于结果特别大,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)
Run Code Online (Sandbox Code Playgroud)
您还可以通过 simple-salesforce 访问批量 API。例如,替换
eatpies = sf.query('Select Id from Case')
attrs = ['Id']
records = eatpies['records']
Run Code Online (Sandbox Code Playgroud)
具有以下内容:
eatpies = sf.bulk.Case.query('Select Id from Case')
attrs = ['Id']
records = eatpies
Run Code Online (Sandbox Code Playgroud)
有关使用批量 API 的更多信息:https://github.com/simple-salesforce/simple-salesforce#using-bulk
| 归档时间: |
|
| 查看次数: |
4016 次 |
| 最近记录: |