2017-10-03 2 views
0

J'essaie de charger des données Salesforce dans une base de données Python, afin que nous puissions y effectuer toutes nos manipulations. simple_salesforce a travaillé avec la mise en garde que nous avons atteint la limite de 2000:Données Salesforce en Python (simple-Salesforce ou 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) 

Soi-disant, salesforce-vrac (https://pypi.python.org/pypi/salesforce-bulk/1.0.7) est en mesure de contourner cette limite, mais je ne peux pas aller plus loin que cela:

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' 

S'il vous plaît, aidez, merci! Si la solution peut être faite en simple-Salesforce pour dépasser la limite de Salesforce, ce serait génial, mais je n'ai pas trouvé de solutions via Google.

Répondre

0

Modifier la ligne

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

à ce qui suit:

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

La méthode query_all une enveloppe de confort autour query(...) et query_more(...).

De la documentation:

Si, en raison d'un très fort résultat, Salesforce ajoute un nextRecordsUrl à votre résultat de la requête, comme "nextRecordsUrl": « /services/data/v26.0/ requête/01gD0000002HU6KIAW-2000" , vous pouvez tirer les résultats supplémentaires avec l'ID ou l'URL complète (si vous utilisez l'URL complète , vous devez passer « Vrai » comme deuxième argument)

sf.query_more("01gD0000002HU6KIAW-2000") 
sf.query_more("/services/data/v26.0/query/01gD0000002HU6KIAW-2000", True) 

Vous avez également accès à Bulk API via simple-salesforce. Par exemple, remplacer

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

ce qui suit:

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

Plus d'informations sur l'utilisation de l'API en vrac: https://github.com/simple-salesforce/simple-salesforce#using-bulk