我尝试使用python连接到Salesforce Bulk API。但是,我不想在真实的salesforce上测试我的代码。我想用我的沙盒进行测试。但是,我不知道如何仅连接到沙箱...我已尝试添加sandbox = True但它不起作用...
import salesforce_bulk
bulk=salesforce_bulk.SalesforceBulk(username="username",password="password")
答案 0 :(得分:1)
此处的建议可能已过时。通过结合使用Salesforce和SalesforceBulk库,可以使批量上传工作。请注意我要传递给api的域以及需要附加到用户名后的sand_box名称。
from simple_salesforce import Salesforce
from salesforce_bulk import SalesforceBulk
import json
from salesforce_bulk.util import IteratorBytesIO
from urllib.parse import urlparse
USER = "user@domain.com.<sandbox_name>"
PASS = "pass"
SEC_TOKEN = "token"
DOMAIN = "<domain>--<sandbox_name>.<instance>.my"
sf = Salesforce(username=USER, password=PASS, security_token=SEC_TOKEN, domain=DOMAIN)
bulk = SalesforceBulk(sessionId=sf.session_id, host=sf.sf_instance)
job = bulk.create_query_job("table", contentType='JSON')
batch = bulk.query(job, "select Id,LastName from table limit 5000")
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)
答案 1 :(得分:0)
您是否检查包是否已安装
此库将使用salesforce-oauth-request软件包(您必须安装)来运行Salesforce OAUTH2 Web流并返回访问令牌。
密码是否有令牌?
答案 2 :(得分:0)
老问题,但今天我遇到了同样的问题,所以也许这会对某人有所帮助。
这是一个完整的黑客,但它确实有效 - 可能是一个更好的黑客将使用salesforce-oauth-request(它确实有一个&#34; sandbox = True&#34;选项)这样做,但我正在记录无论如何,在via beatbox中,所以先试试了。
Gist是使用beatbox登录沙箱(允许您指定serverUrl),然后使用该sessionId和instance_url通过salesforce_bulk登录。
import beatbox
from salesforce_bulk import SalesforceBulk
# log in to sandbox using beatbox
service = beatbox.PythonClient()
service.serverUrl = 'https://test.salesforce.com/services/Soap/u/20.0'
user = 'user@user.com'
password = 'secret'
token = '12345'
service.login(user, password+token)
# the _Client_serverUrl has the instance url + some
# SOAP stuff, so we need to strip that off
groups = service._Client__serverUrl.split('/')
instance_url = '/'.join(groups[:3])
# now we can use the instance_url and sessionId to
# log into Salesforce through SalesforceBulk
bulk = sfdc_bulk_connect(instance_url, service.sessionId)