🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2151閲覧

Pythonでループ内処理の中でリストを初期化せず、全ての要素を一つのリストに格納したいです。

amaturePy

総合スコア131

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/01/30 06:12

現在以下の機能のAPIを作成してます。
①Getリクエストからリストをパラメーター(DBのテーブル名)で取得
②①で取得したパラメーターをループ処理でSQLの変数に使い結果を取得(テーブルの全カラムを取得)
③②で取得したデータを全て変数tag_listにまとめる
④tag_listをクライアントに返す

この中で③のSQLの結果を一つの変数に全てまとめるところでうまく行きません。
以下のコードを見て頂いた通り、毎回のfor文の際にtag_list = []と初期化しているため、各SQLの結果がそれぞれ別のリストとして格納されているのですが、変数tag_listにまとめるためにはどのような処理を加えればいいでしょうか??

何かアドバイスなどありましたらご教授頂ければ幸いです。よろしくお願いします。
動作がテスト出来次第、このコードをベースにFlaskで書き直して実装します。

import urllib.request import urllib.parse import json from google.cloud import bigquery def get_tags(): client = bigquery.Client() tableName = ['clientA','clientB','test2'] for table in tableName: query = """SELECT column_name FROM `test_project.test_table.INFORMATION_SCHEMA.COLUMNS` where table_name = '{}' """.format(table) job_config = bigquery.QueryJobConfig( query_parameters=[ bigquery.ScalarQueryParameter("table", "STRING", table) ] ) query_job = client.query(query) query_res = query_job.result() tag_list = [] for row in query_res: tag_list.append(row[0]) print(tag_list) # response = json.dumps(tag_list) # return print(response) get_tags()

print(tag_list)結果

['skincare', 'chubby', 'aging_body_odor', 'pimple', 'clientA']
['constipation', 'Hyperhidrosis', 'bad_breath', 'clientB']
['column1', 'column2', 'column3', 'test2']

理想

['skincare', 'chubby', 'aging_body_odor', 'pimple', 'clientA','constipation', 'Hyperhidrosis', 'bad_breath', 'clientB','column1', 'column2', 'column3', 'test2']

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記のようにfor文の外側でリストを定義すれば良いと思いますが、その実装の場合は問題ありますでしょうか。

python

1import urllib.request 2import urllib.parse 3import json 4 5from google.cloud import bigquery 6 7def get_tags(): 8 client = bigquery.Client() 9 tableName = ['clientA','clientB','test2'] 10 tag_list = [] # 変更点 11 for table in tableName: 12 query = """SELECT column_name 13 FROM `test_project.test_table.INFORMATION_SCHEMA.COLUMNS` 14 where table_name = '{}' """.format(table) 15 16 17 job_config = bigquery.QueryJobConfig( 18 query_parameters=[ 19 bigquery.ScalarQueryParameter("table", "STRING", table) 20 ] 21 ) 22 23 query_job = client.query(query) 24 query_res = query_job.result() 25 26 # tag_list = [] 27 for row in query_res: 28 tag_list.append(row[0]) 29 print(tag_list) 30 31 # response = json.dumps(tag_list) 32 # return print(response) 33 34get_tags()

投稿2021/01/30 06:17

編集2021/01/30 06:19
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

amaturePy

2021/01/30 06:25

ありがとうございます! お恥ずかしいです。 かなり初歩的な質問させて頂いてました。 おかげさまで解決いたしました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問