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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

Q&A

解決済

1回答

1729閲覧

【Python+Flask】mysqlからの複数データ取得が出来ない。

yujin1202

総合スコア61

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

0グッド

0クリップ

投稿2021/04/28 08:42

編集2021/04/30 22:41

<追加で質問があります。>
御回答を頂いて、大きな部分は解決したのですが、最後で未解決部分があります。
引き続き、教えて頂きたく。コンソール上で複数データ表示するところまでは成功しておりますが、HTML上で複数表示する部分で、スタックしてしまっております。

<背景>
Python Flaskを使用して、DB(mysql)サーバから、データを引っ張ってきて、HTMLに表示すると言うシステム全体を開発しております。
下記の様なシステムです。(Python✛Flaskで開発しております。)
・ユーザーは、HTML(index.html)上で、品目のチェックボックスにチェックを入れて(複数選択も可)、送信ボタンをクリックする。
・選択された品目のスペック情報を、DBから引っ張ってきて、HTML(index1.html)に表示する

<説明>
試行錯誤した結果、下記の様なコードにたどり着きました。(HTMLファイルは本質問とは直接関係ないので、Pythonファイルだけ記載します。)
一つの品目を選択した場合は、キチンと期待したデータを返してきます。(ここはOK)
しかしながら、複数の品目(2つでも3つでも)を選択した場合は、一番最初にチェックされた品目しか、リターンされません。(HTML上は勿論ですが、コンソール上でも同様です。)

<質問>
複数項目を表示(コンソール上に)させる為には、どの様なコードを書けば良いのでしょうか?
for文とWhile文の両方で、丸2日間、色々と試したのですが、どうしても上手くいきません。
よろしくお願いいたします。

<Pythonのコード>

from flask import Flask, render_template,request import pymysql app = Flask(__name__) @app.route('/', methods=['GET']) def get(): return render_template('index.html', \ title = 'Form Sample(get)', \ message = 'Where do you want to go?') def getConnection(): return pymysql.connect( host='localhost', db='first_db', user='root', password='password', charset='utf8', cursorclass=pymysql.cursors.DictCursor ) @app.route('/', methods=['POST']) def select_sql(): connection = getConnection() message = "test" names = request.form.getlist('checkbox') for name in names: cursor = connection.cursor() sql = "select Country, Agency, email from tb3 where Country=%s"; cursor.execute(sql, (name,)) list1 = cursor.fetchall() print(list1) #コンソール上での動作確認用 cursor.close()  #can110さんのコメント受け、Indent修正 connection.close() #can110さんのコメント受け、Indent修正 return render_template( 'index1.html', list1 = list1) #can110さんのコメント受け、Indent修正 if __name__ == '__main__': app.run()コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

ループ処理の中で最後にreturnしているからです。
ループ処理の中ではデータを取得、リストに追加までをおこない
ループを抜けたあとに各種closeおよびrender_templateする必要があるかと思います。

投稿2021/04/28 08:56

can110

総合スコア38341

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

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

yujin1202

2021/04/28 13:50 編集

早速のコメントをありがとうございます。 >ループを抜けたあとに各種closeおよびrender_templateする必要があるかと思います。 御指摘の通りでした。 Indentを修正した所、コンソール上でキチンと複数品目がリターンされるのを確認しました。 ************ 申し訳ないのですが、もう一点、教えてください。 コンソール上では解決したのですが、HTML上で表示されません。 HTML(Index1.html)の該当コードは下記の様にしておりますが、複数品目を選んでも、HTML上では、相変わらず、1品目しか表示されません。(ループがHTML上で回りません。) 下記のHTMLファイルの書き方を教えて頂きたく。 お願いばかりで申し訳ないのですが、よろしくお願いいたします。 <現行のIndex1.htmlの該当部分> ============== {% block content %}   <tab> {% for listx1 in listx1s %} <tab><tab> <p>{{listx1}}</p> <tab> {% endfor %} {% endblock %} ===========
yujin1202

2021/05/01 06:52

上記の部分(HTML上での表示)が解決できていないのですが、当初、質問させて頂いたコンソール上での表示問題は解決したので、一旦、解決済とさせて頂きます。 ありがとうございました。 HTML上での表示問題は、別の質問(https://teratail.com/questions/336073)を立てさせていただきます。 引き続き、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問