以下のことを実行できるAPIをPythonのフレームワークのFlaskで作成しております。
SQLを実行する先のDBはGoogle BigQueryを使用しております。
①複数のレクエストパラメーター(luid)をリストで取得し、ループ処理でそれぞれを変数に格納 ②①の変数をWhere区の条件に使用しSQLを実行する *SQLの内容はリクエストされたluidのcv_dateカラムに値があればTrueを返す ③結果をパラメーター値:真偽値のJson形式でクライアントに返す
現状としては上記の機能は真偽値を返す所までは実装できています。
ですが、返り値をみるとrequest_luidsのリストの中の最初のluidの結果しか表示されて無いです。
本来の要件としては以下のように取得した全てのluidに対して結果を返したいです。
request_luidsの中身をデバックするとリストでluidを取得できていると確認しております。
最後の結果を出力している
for row in query_res: return jsonify({request_luid: str(row[0]) })
この記述をfor文の中で処理しているなど、実装したい内容に対して何か自分の中で間違った書き方や認識などがあればご教授頂きたいです。
また、読みにくい記述も多々あるかとは思いますが、よろしくお願いします。
現状の出力 { "XXXXXXX5e30ab17f6b536879d25555": "True"⬅︎結果は真偽値判定は現状問題なく機能してます } 理想の出力 { "XXXXXXX5e30ab17f6b536879d25555": "True", "XXXXXXX8r30ab17f6b536879d25555": "False", "XXXXXXX9t30ab17f6b536879d25555": "True", }
エンドポイント https://test-project-galvanic-ripsaw-281806.df.r.appspot.com?luid=XXXXXXX5e30ab17f6b536879d25555&luid=XXXXXXX8r30ab17f6b536879d25555 &luid=XXXXXXX9t30ab17f6b536879d25555
main.py @app.route('/') def get_request(): request_luids = request.args.getlist('luid') or '' for i in range(len(request_luids)): request_luid = request_luids[i] client = bigquery.Client() query = """SELECT EXISTS( SELECT 1 FROM `test-project-281806.hitobito_test.test3` as p WHERE p.luid = '{}' AND p.cv_date IS NOT NULL limit 1000)""".format(request_luid) job_config = bigquery.QueryJobConfig( query_parameters=[ bigquery.ScalarQueryParameter("request_luid", "STRING", request_luid) ] ) query_job = client.query(query) query_res = query_job.result() for row in query_res: return jsonify({request_luid: str(row[0]) }) if __name__ == "__main__": app.run()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。