我正在使用模块simple-salesforce
,我在文档中没有看到有关进行批量API调用的任何内容。有谁知道怎么做?
答案 0 :(得分:8)
The code确实有一些评论。还有this readthedocs page但是,即使看起来它可以使用一些帮助。
首先是好东西,下面说明。
代码示例(假设您一次运行整个代码块而编写):
from simple_salesforce import Salesforce
sf = Salesforce(<credentials>)
# query
accounts = sf.bulk.Account.query('SELECT Id, Name FROM Account LIMIT 5')
# returns a list of dictionaries similar to: [{'Name': 'Something totally new!!!', 'attributes': {'url': '/services/data/v38.0/sobjects/Account/object_id_1', 'type': 'Account'}, 'Id': 'object_id_1'}]
# assuming you've pulled data, modify it to use in the next statement
accounts[0]['Name'] = accounts[0]['Name'] + ' - Edited'
# update
result = sf.bulk.Account.update(accounts)
# result would look like [{'errors': [], 'success': True, 'created': False, 'id': 'object_id_1'}]
# insert
new_accounts = [{'Name': 'New Bulk Account - 1', 'BillingState': 'GA'}]
new_accounts = sf.bulk.Account.insert(new_accounts)
# new_accounts would look like [{'errors': [], 'success': True, 'created': True, 'id': 'object_id_2'}]
# upsert
accounts[0]['Name'] = accounts[0]['Name'].replace(' - Edited')
accounts.append({'Name': 'Bulk Test Account'})
# 'Id' is the column to "join" on. this uses the object's id column
upserted_accounts = sf.bulk.Account.upsert(accounts, 'Id')
# upserted_accounts would look like [{'errors': [], 'success': True, 'created': False, 'id': 'object_id_1'}, {'errors': [], 'success': True, 'created': True, 'id': 'object_id_3'}]
# how i assume hard_delete would work (i never managed to run hard_delete due to insufficient permissions in my org)
# get last element from the response.
# *NOTE* This ASSUMES the last element in the results of the upsert is the new Account.
# This is a naive assumption
new_accounts.append(upserted_accounts[-1])
sf.bulk.Account.hard_delete(new_accounts)
使用simple_salesforce,您可以通过
访问批量API<your Salesforce object>.bulk.<Name of the Object>.<operation to perform>(<appropriate parameter, based on your operation>)
<your Salesforce object>
是您从构建simple_salesforce.Salesforce(<credentials>)
时获得的对象
<credentials>
是您的username
,password
,security_token
和sandbox
(bool,如果您要连接到沙箱)或{{1 }}。 (这是我所知道的两种方式)session_id
只是<Name of the Object>
或Account
或您试图操纵的任何对象Opportunity
是以下之一:
<operation to perform>
取决于您希望执行的操作
<appropriate parameter>
或任何其他列;做出明智的选择。如果任何字典没有与“外部ID”相同的密钥,则将创建新记录。 'Id'
键。这包含一个'attributes'
密钥,看起来它可以用于特定对象的api请求,密钥和'url'
密钥,这是返回的对象的类型'type'
感谢@ATMA's question了解如何使用{'errors': [], 'success': True, 'created': False, 'id': 'id of object would be here'}
。通过该问题和源代码,我们能够找出query
,insert
和update
。
答案 1 :(得分:1)
我研究了许多其他基于Python的批量API工具。其中包括Salesforce-bulk 1.0.7(https://pypi.python.org/pypi/salesforce-bulk/1.0.7),Salesforce-bulkipy 1.0(https://pypi.python.org/pypi/salesforce-bulkipy)和Salesforce_bulk_api(https://github.com/safarijv/salesforce-bulk-api)。
我遇到了一些问题,在我的系统上配置了Salesforce-bulk 1.0.7和Salesforce-bulkipy 1.0,但Salesforce_bulk_api工作得很好。它使用simple-salesforce作为身份验证机制,但处理批量作业的创建并为您上传记录。
请注意,简单销售人员和批量API的工作方式不同。 Simple-Salesforce通过REST工作,因此您只需创建JSON字符串 - 这些字符串很容易与Python dicts兼容。批量API使用上载到Salesforce的CSV文件。创建这些CSV可能有点危险,因为标头中字段名称的顺序必须与文件中数据元素的顺序相对应。这不是什么大不了的事,但是在创建订单在标题和数据行之间匹配的CSV行时,我需要更加小心。