web-dev-qa-db-ja.com

Python Simple Salesforce Select All Fields

Python Simple-Salesforceを使用してSOQLを介してデータをクエリしています。SOQL構文では「SELECT *」がサポートされていないことがわかっているので、Python SELECTステートメントに挿入するすべてのフィールドの文字列リストを収集するスクリプト。以下は、アカウントオブジェクトの説明方法です。

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)

以下に示す順序付き辞書からフィールド名を文字列リストに抽出するにはどうすればよいですか?

desc

OrderedDict([( 'actionOverrides'、[])、( 'activateable'、False)、( 'childRelationships'、[OrderedDict([( 'cascadeDelete'、False)、( 'childSObject'、 'Account')、( 'deprecatedAndHidden '、False)、(' field '、' ParentId ')、(' junctionIdListNames '、[])、(' junctionReferenceTo '、[])、(' RelationshipName '、' ChildAccounts ')、(' reservedDelete '、False) ])、OrderedDict([( 'cascadeDelete'、True)、( 'childSObject'、 'AccountCleanInfo')、( 'deprecatedAndHidden'、False)、( 'field'、 'AccountId')、..... ..

文字列リストを使用して、すべてのフィールドを選択します。

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

以下に示す順序付き辞書からフィールド名を文字列リストに抽出するにはどうすればよいですか?

ソリューションを含めるようにコードを拡張しました

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)

質問が少し前に投稿されたことに気づきました。完全な解決策が必要なだけです。

12
orion11

このpythonライブラリ記述呼び出しはここで見ることができます:

https://github.com/simple-salesforce/simple-salesforce/blob/d2ba65e977730ce987ca7d3c38e0f8965d99eec1/simple_salesforce/api.py#L184

もし私があなただったら、そもそも彼らがどのようにして注文辞書を入手したかを追跡します。

あなたはこの行から見ることができます:

https://github.com/simple-salesforce/simple-salesforce/blob/d2ba65e977730ce987ca7d3c38e0f8965d99eec1/simple_salesforce/api.py#L187

ここからベースURLを使用すること:

https://github.com/simple-salesforce/simple-salesforce/blob/d2ba65e977730ce987ca7d3c38e0f8965d99eec1/simple_salesforce/api.py#L17

これを使用すると、ワークベンチで同じ呼び出しを行うことができます。

https://workbench.developerforce.com/login.php

簡単なグーグル検索で、辞書をトラバースする方法に関するいくつかの有用な例を見つけることができます。ここにいくつかあります:

これを行う方法-python辞書のトラバースと検索

ネストされたすべての辞書値をループしますか?

任意の深さのネストされたディクショナリ上を歩く/反復する(ディクショナリはディレクトリツリーを表す)

あなたが探しているものを知っている限り、辞書を横断することはかなり簡単なはずです。

警告の言葉、私の経験から、すべてのフィールドをクエリすることは FFLib のようなエンタープライズフレームワークに最適ですが、一部のオブジェクトは1つのSOQLクエリにすべてのフィールドを持つように設計されていません。

SOQLの制限については、次のページを参照してください。

https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_limits.htm

お役に立てれば。

1
Tiaan Swart