Search code examples
pythonsalesforcesoqlsimple-salesforce

Python Simple Salesforce Select All Fields


I'm using Python Simple-Salesforce to query data via SOQL. I know that "SELECT *" is not supported in SOQL syntax, so I want to create a Python script to gather a string list of all fields to insert into the SELECT statement. Below is how I am describing the Account Object:

from simple_salesforce import Salesforce
from simple_salesforce import SFType

#(credentials hidden)
sf = Salesforce(username=username, password=password,
                security_token=security_token, sandbox=True, 
                client_id='mwheeler App')

desc = sf.Account.describe()  
print(desc)

How should I extract the field names into a string list from the Ordered Dictionary shown below?

desc:

OrderedDict([('actionOverrides', []), ('activateable', False), ('childRelationships', [OrderedDict([('cascadeDelete', False), ('childSObject', 'Account'), ('deprecatedAndHidden', False), ('field', 'ParentId'), ('junctionIdListNames', []), ('junctionReferenceTo', []), ('relationshipName', 'ChildAccounts'), ('restrictedDelete', False)]), OrderedDict([('cascadeDelete', True), ('childSObject', 'AccountCleanInfo'), ('deprecatedAndHidden', False), ('field', 'AccountId'), ......

I will be using the string list to select all fields:

query = sf.query_all("SELECT string_list FROM Account")

Solution

  • How should I extract the field names into a string list from the Ordered Dictionary shown below?

    I've extended your code to include the solution

    from simple_salesforce import Salesforce
    
    #(credentials hidden)
    sf = Salesforce(username=username, password=password,
                    security_token=security_token, sandbox=True, 
                    client_id='mwheeler App')
    
    desc = sf.Account.describe()  
    
    # Below is what you need
    field_names = [field['name'] for field in desc['fields']]
    soql = "SELECT {} FROM Account".format(','.join(field_names))
    results = sf.query_all(soql)
    
    # Alternative method to retrieve results
    # I don't have any recommendation which to use
    results = sf.bulk.Account.query(soql)
    

    I realize the question was posted a while ago, just want it to have a complete solution.