丸一日、試行錯誤していたのですが、どうしても上手く行かないので、教えてください。
1.<やりたい事>
pythonで、Mysql DBからデータを取得し、それをHTMLに表示しようとしております。
DBは、下記の様になっております。
HTML上で、下記様にチェックを入れて、送信ボタンを押すと、
2.<質問>
Pythonコードは項番3に記載しておきますが、下記1)の様に、チェックされた項目(国名)は、namesと言う変数で取得しております。
1)names = request.form.getlist('checkbox')
2)ここで、print(names) とすると、想定通り、チェックされたのを返します。
(想定通りです。)
>['Afgahanistan', 'Australia', 'France']
3)for name in names:
<tab> print(name)
また、この様にすると、国名を個別に返してきます。(これも想定通りです。)
Afgahanistan
Australia
France
4)国名(この場合は、上記3か国)をSelect文のwhere句に代入して、変数として、情報を取りたいと考え、下記(a)の様にSelect文を書いたのですが、これが動作しません。
(a) sql = "select Country, Agency, email from tb3 where Country='name'";
(このsql文をPythonに書くと、エラーは出ないのですが、出力が真っ白な画面となります。)
尚、問題の切り分けの為に、このsql文のWhere句を下記の様(b)に個別国名(この例では、Afgahanistan)に書き換えると、Afgahanistanのデータを正常に返してきます。ついては、やはり、上記(a)の'name'の部分がオカシイのでは?と思っております。
(b) sql = "select Country, Agency, email from tb3 where Country='Afgahanistan'";
繰り返しになるのですが、多分、(a)の「where Country='name';」のnameの部分で、変数がキチンと取得できていないと思うのですが、如何でしょうか?
3.下記にPythonコードを記載します。
また、本件とは関係ないと思いますが、一応、HTMLのコードも記載しておきます。
よろしくお願いいたします。
<Pythonのコード>
from flask import Flask, render_template,request import pymysql app = Flask(__name__) @app.route('/', methods=['GET']) def get(): return render_template('index1.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='yireozna', charset='utf8', cursorclass=pymysql.cursors.DictCursor ) @app.route('/', methods=['POST']) def select_sql(): connection = getConnection() message = "test" names = request.form.getlist('checkbox') print(names) for name in names: print(name) <tab> sql = "select Country, Agency, email from tb3 where Country='name'"; <tab> cursor = connection.cursor() <tab> cursor.execute(sql) <tab> listx1s = cursor.fetchall() <tab> cursor.close() <tab> connection.close() <tab> return render_template( 'index2.html', listx1s = listx1s) if __name__ == '__main__': app.run() コード
<Index1.htmlのコード>
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Hello World</title> </head> <body> <h1>{{ title }}</h1> <p>{{ message }}</p> <form action="/" method="POST" enctype="multipart/form-data"> <div> <label for="ck1">Afgahanistan:</label> <input type="checkbox" id="ck1" name="checkbox" value="Afgahanistan"> </div> <div> <label for="ck2">Australia:</label> <input type="checkbox" id="ck2" name="checkbox" value="Australia"> </div> <div> <label for="ck3">England:</label> <input type="checkbox" id="ck3" name="checkbox" value="England"> </div> <div> <label for="ck4">France:</label> <input type="checkbox" id="ck4" name="checkbox" value="France"> </div> <div> <input type="submit" value="送信"> </div> </form> </body> </html>
<Index2.htmlのコード>
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Hello World</title> </head> <body> <h1>{{ title }}</h1> <p> {% block content %} {% for listx1 in listx1s %} <p>{{listx1}}</p> {% endfor %} {% endblock %} </form> </body> </html>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/26 11:59 編集
2021/04/26 12:23
2021/04/27 15:16
2021/04/28 08:16