質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

961閲覧

pythonで文字列をスクリプトとして実行し結果を取得したい

azzuro

総合スコア53

Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/10 02:46

編集2020/09/10 04:19

前提・実現したいこと

pythonでスクリプトを実行する際、スクリプトの一部を変数にして実行して、結果を取得したいです。
salesforceのオブジェクトからデータを取得する必要があり、今までは対象となるオブジェクトが1つだったのでオブジェクト名を固定にしていましたが複数になる可能性がでてきました。
そこでオブジェクト名を変数にして動的にすることにしましたが結果が取得できません。
execを使ってみましたがわかりにくく、あまり推奨されないようなので他にもっといい方法があればそちらでもかまいません。
ご教授お願いします。

もともとのソースコード

python

1q = self.cn.sf.bulk.Account.query(sql) 2cnt = len(q)

これを下記のようにexecを使って書き換えました

python

1#対象オブジェクト 2target = 'Account' 3#データ取得 4q = exec(f'self.cn.sf.bulk.{target}.query("{sql}")') 5#レコード数 6cnt = len(q)

execで実行はされるが結果が取得できません

TypeError: object of type 'NoneType' has no len()

試したこと

引数を使うと返り値が取れるらしいので下記に変更しましたがエラーになります

python

1#データ取得 2target = 'Account' 3a = dict() 4exec(f'self.cn.sf.bulk.{target}.query("{sql}")', globals(), a) 5#レコード数 6cnt = len(a)
NameError: name 'self' is not defined

補足情報(FW/ツールのバージョンなど)

python 3.8.1
simple-salesforce 1.10.1
vscode 1.48.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

元々のコードが示されていない以上具体例は書けませんが
https://docs.python.org/ja/3/library/functions.html#getattr
を使う方向がいいかと思います。

投稿2020/09/10 02:54

quickquip

総合スコア11235

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azzuro

2020/09/10 04:21

ご回答ありがとうございます。 もともとのコードを追加しました。 getatrrはまだ使ったことがないので調べてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問