Salesforce.com批量API的Python接口。

salesforce-bulk的Python项目详细描述


travis-badge

Salesforce批量

用于访问异步salesforce.com批量的python客户机库 应用程序编程接口。

安装

pip install salesforce-bulk

认证

要访问批量api,您需要向salesforce验证用户。 最简单的方法就是提供usernamepasswordsecurity_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的基本顺序是:

  1. 创建新工单
  2. 向作业中添加一个或多个批次
  3. 关闭作业
  4. 等待每一批完成

批量查询

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'设置作业的并发模式。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java播放流媒体音乐   LWJGL中的java纹理未显示   java从父集合中删除时删除子对象   mysql希望在我的代码中添加验证,如果表不存在,它应该用java创建新表   java我可以关闭客户端的socket而不引起服务器端的EOFEException吗?   java Primefaces对话框框架咆哮和showMessageInDialog不工作   hadoop配置单元无法初始化类java。网网络接口   关键字中缺少oracle11g Java iBatis   java在RESTAPI中创建PUT和POST端点,而不创建GET端点?   java Math abs和ceil输出编译错误   java Tomcat 8.017代md5及其摘要。球棒   java SpringBean配置xml文件在IteliJ Idea中加载   java为什么在使用Powershell指定Xms和Xmx时,它们什么都不做,但通过Netbeans IDE可以正常工作?   java Drools项目构建失败,kjar打包从7.7版开始