2017-10-03 4 views
0

Salesforce 데이터를 Python 데이터 프레임에로드하려고하므로 여기에서 모든 작업을 수행 할 수 있습니다. simple_salesforce 우리가 2,000 한계에 도달 한 경고와 함께 일 :Salesforce 데이터를 Python으로 (간단한 Salesforce 또는 salesforce-bulk)

from simple_salesforce import Salesforce as s 
eatpies = sf.query('Select Id from Case') 
attrs = ['Id'] 
records = eatpies['records'] 

data = {} 

for rec in records: 
    for k in attrs: 
     data.setdefault(k, []).append(rec[k]) 

dframe = pd.DataFrame(data) 

print(dframe) 

기발한, 세일즈 포스 벌크 (https://pypi.python.org/pypi/salesforce-bulk/1.0.7)이이 제한을 우회 할 수 있습니다,하지만이보다 더 얻을 수 없습니다

job = bulk.create_query_job("Case", contentType='CSV') 
batch = bulk.query('select Id, type from Case') 

TypeError         Traceback (most recent call last) 
<ipython-input-13-076e14bf245d> in <module>() 
----> 1 batch = bulk.query('select Id, type from Case') 

TypeError: query() missing 1 required positional argument: 'soql' 

도와주세요, 고마워요! 솔루션이 단순한 Salesforce에서 Salesforce 제한을 초과하여 수행 될 수 있다면 좋지만 Google을 통해 솔루션을 찾을 수 없습니다.

답변

0

변경 라인은 다음과

eatpies = sf.query('Select Id from Case') 

:

eatpies = sf.query_all('Select Id from Case') 

방법 query_all query(...)query_more(...)의 간이 래퍼. 워드 프로세서

:

하면, 인해 특히 큰 결과로는, 세일즈 포스는 "nextRecordsUrl"로, 쿼리 결과에 nextRecordsUrl을 추가 "/services/data/v26.0/을

sf.query_more("01gD0000002HU6KIAW-2000") 
sf.query_more("/services/data/v26.0/query/01gD0000002HU6KIAW-2000", True) 
,536 쿼리/01gD0000002HU6KIAW-2000 "은, 당신은 ID 또는 전체 URL 중 하나와 추가 결과를 가져올 수 있습니다합니다 ( 전체 URL을 사용하는 경우, 당신은 당신의 두 번째 인수로 '진정한'통과해야합니다)

또한 간단한 salesforce를 통해 대량 API에 액세스 할 수 있습니다. 예를 들어, 다음과

eatpies = sf.query('Select Id from Case') 
attrs = ['Id'] 
records = eatpies['records'] 

교체 :

eatpies = sf.bulk.Case.query('Select Id from Case') 
attrs = ['Id'] 
records = eatpies 

더 많은 정보를 대량 API를 사용하는 방법에 대해 : https://github.com/simple-salesforce/simple-salesforce#using-bulk