質問編集履歴

3 追加質問

yujin1202

yujin1202 score 36

2021/05/01 07:41  投稿

【Python+Flask】mysqlからの複数データ取得が出来ない。
<追加で質問があります。>  
御回答を頂いて、大きな部分は解決したのですが、最後で未解決部分があります。  
引き続き、教えて頂きたく。コンソール上で複数データ表示するところまでは成功しておりますが、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()コード
```
  • Python

    37031 questions

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

  • MySQL

    11964 questions

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

  • Flask

    975 questions

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

  • HTML5

    10348 questions

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

  • Jinja

    54 questions

2

yujin1202

yujin1202 score 36

2021/04/29 15:47  投稿

【Python+Flask】mysqlからの複数データ取得が出来ない。
<背景>
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()コード
```
  • Python

    37031 questions

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

  • MySQL

    11964 questions

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

  • Flask

    975 questions

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

  • HTML5

    10348 questions

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

  • Jinja

    54 questions

1 コメントを受け、Indent修正

yujin1202

yujin1202 score 36

2021/04/28 22:40  投稿

【Python+Flask】mysqlからの複数データ取得が出来ない。
<背景>
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()
      connection.close()
   cursor.close()  #can110さんのコメント受け、Indent修正
   connection.close() #can110さんのコメント受け、Indent修正
      return render_template( 'index1.html', list1 = list1)
   return render_template( 'index1.html', list1 = list1) #can110さんのコメント受け、Indent修正
if __name__ == '__main__':
   app.run()コード
```
  • Python

    37031 questions

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

  • MySQL

    11964 questions

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

  • Flask

    975 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る