Python 如何通过simple_Salesforce进行Salesforce批量API调用?

Python 如何通过simple_Salesforce进行Salesforce批量API调用?,python,salesforce,simple-salesforce,Python,Salesforce,Simple Salesforce,我使用的是simple salesforce模块,在文档中没有看到任何关于批量API调用的内容。有人知道怎么做吗 几周前我遇到了同样的问题。遗憾的是,没有一种简单的salesforce方法可以做到这一点。我通过资料来源进行的研究似乎没有任何方法可以做到这一点,也没有任何方法可以通过破解来实现这一点 我研究了许多其他基于Python的批量API工具。其中包括Salesforce bulk 1.0.7、Salesforce bulkipy 1.0和Salesforce_bulk_api 在我的系统上

我使用的是simple salesforce模块,在文档中没有看到任何关于批量API调用的内容。有人知道怎么做吗


几周前我遇到了同样的问题。遗憾的是,没有一种简单的salesforce方法可以做到这一点。我通过资料来源进行的研究似乎没有任何方法可以做到这一点,也没有任何方法可以通过破解来实现这一点

我研究了许多其他基于Python的批量API工具。其中包括Salesforce bulk 1.0.7、Salesforce bulkipy 1.0和Salesforce_bulk_api

在我的系统上配置Salesforce bulk 1.0.7和Salesforce bulkipy 1.0时,我遇到了一些问题,但是Salesforce_bulk_api运行得非常好。它使用simple salesforce作为身份验证机制,但为您处理批量作业的创建和上传记录

请注意,简单salesforce和批量API的工作方式不同。简单的Salesforce通过REST工作,因此您只需创建JSON字符串——这很容易与Python dict兼容。批量API使用上载到Salesforce的CSV文件。创建这些CSV可能有点危险,因为标头中字段名的顺序必须对应于文件中数据元素的顺序。这没什么大不了的,但是在创建CSV行时,您需要更加小心,确保标题行和数据行之间的顺序匹配。

确实有一些注释。还有,但是,即使这样看起来也需要一些帮助

首先是好东西,解释如下

假设您同时运行整个代码块,则编写代码示例:

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>)
是您从构造simple_salesforce.salesforce中得到的对象 是您的用户名、密码、安全令牌和sandboxbool,如果您连接到沙盒或会话id。这是我知道的两种方法 只是账户、机会或任何你试图操纵的对象 是以下其中一项: 查询 插入 使现代化 更新插入 “硬删除我的帐户”没有测试此操作的适当权限。任何提及都纯粹是猜测
用于显示如何使用查询。有了这个问题和源代码,我们就能够理解插入、更新和升级。

这应该是最好的答案了@Terminus,你能展示一些上传附件并使用simple_salesforce将其与ID关联的示例吗?@lollerskates从未尝试过。很久没有和salesforce打过交道了,我想有些人会看简单的salesforce标签;使用它,你可能会幸运地提出一个好问题。祝你好运