Salesforce.com批量API的Python接口。
salesforce-bulk的Python项目详细描述
Salesforce批量
用于访问异步salesforce.com批量的python客户机库 应用程序编程接口。
安装
pip install salesforce-bulk
认证
要访问批量api,您需要向salesforce验证用户。 最简单的方法就是提供username,password 和security_token。此库将使用simple-salesforce 用于处理基于密码的身份验证的包。
from salesforce_bulk import SalesforceBulk bulk = SalesforceBulk(username=username, password=password, security_token=security_token) ...
或者,如果您运行有权访问会话ID和实例URL 您可以直接使用:
from urlparse import urlparse from salesforce_bulk import SalesforceBulk bulk = SalesforceBulk(sessionId=sessionId, host=urlparse(instance_url).hostname) ...
操作
驱动批量api的基本顺序是:
- 创建新工单
- 向作业中添加一个或多个批次
- 关闭作业
- 等待每一批完成
批量查询
bulk.create_query_job(object_name, contentType='JSON')
使用APIv39.0或更高版本,还可以使用queryall操作:
bulk.create_queryall_job(object_name, contentType='JSON')
示例
from salesforce_bulk.util import IteratorBytesIO import json job = bulk.create_query_job("Contact", contentType='JSON') batch = bulk.query(job, "select Id,LastName from Contact") bulk.close_job(job) while not bulk.is_batch_done(batch): sleep(10) for result in bulk.get_all_results_for_query_batch(batch): result = json.load(IteratorBytesIO(result)) for row in result: print row # dictionary rows
相同的示例,但对于csv:
import unicodecsv job = bulk.create_query_job("Contact", contentType='CSV') batch = bulk.query(job, "select Id,LastName from Contact") bulk.close_job(job) while not bulk.is_batch_done(batch): sleep(10) for result in bulk.get_all_results_for_query_batch(batch): reader = unicodecsv.DictReader(result, encoding='utf-8') for row in reader: print row # dictionary rows
注意,由于历史原因,csv是默认值,json应该 首选,因为csv有一些缺点,包括它对空值的处理 对空字符串。
主键块标题
如果您正在查询大量记录,则可能需要打开PK Chunking:
bulk.create_query_job(object_name, contentType='CSV', pk_chunking=True)
这将使用块大小的默认设置。您可以通过提供 每个块的记录数:
bulk.create_query_job(object_name, contentType='CSV', pk_chunking=100000)
此外,如果您想做更复杂的事情,可以提供一个标题值:
bulk.create_query_job(object_name, contentType='CSV',pk_chunking='chunkSize=50000; startRow=00130000000xEftMGH')
批量插入、更新、删除
所有批量上载操作的工作原理相同。当你 创建作业。然后提交一个或多个指定 包含要插入/更新/删除的列的记录。删除时应 只提交每个记录的ID。
为了提高效率,您应该使用post_batch方法来发布每个 一批数据。(注意,批处理可以有最多10000个记录, 大小为1GB。)将生成器或迭代器传递给此函数并 它将通过post将数据流传送到salesforce。有关发送csv的帮助 格式化数据可以使用Salesforce_Bulk.csvdictsadapter类。 它接受返回字典的迭代器并返回迭代器 它生成csv数据。
完整示例:
from salesforce_bulk import CsvDictsAdapter job = bulk.create_insert_job("Account", contentType='CSV') accounts = [dict(Name="Account%d" % idx) for idx in xrange(5)] csv_iter = CsvDictsAdapter(iter(accounts)) batch = bulk.post_batch(job, csv_iter) bulk.wait_for_batch(job, batch) bulk.close_job(job) print "Done. Accounts uploaded."
并发模式
创建作业时,请传递concurrency='Serial'或 concurrency='Parallel'设置作业的并发模式。