English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
PythonはSQLiteに組み込みのサポートを持ちます。SQLite3Pythonディストリビューションに同梱されているモジュールです。このセクションでは、FlaskアプリケーションがSQLiteとどのように交互作用するかを見てみましょう。
SQLiteデータベースを作成します。 ‘database.db’その中でstudentテーブルを作成します。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 import sqlite3 conn = sqlite3.connect('database.db') print "Opened database successfully"; conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)') print "Table created successfully"; conn.close()
Flaskアプリケーションには3つのビュー関数があります。
最初のnew_student()関数は、URLルール(‘/addnew())。それにより、学生情報フォームを含むHTMLファイルが表示されます。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 @app.route('/enternew') def new_student(): return render_template('student.html')
‘student.html’のHTMLスクリプトは以下の通りです -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flaskサンプル</title> </head> <body> <form action="{{ url_for('addrec') }}" method="POST"> <h3>学生情報</h3> 名前 <input type = "text" name = "nm" /></br> 住所<br> <textarea name = "add" /><br> 都市<br> <input type = "text" name = "city" /><br> 郵便番号<br> <input type = "text" name = "pin" /><br> <input type = "submit" value = "提出" /><br> </form> </body> </html>
フォームデータはaddrec()関数にバインドされ、URL => ‘/addrec’ 。
このaddrec()関数はPOSTメソッドでフォームのデータを取得し、学生テーブルに挿入します。挿入操作の成功またはエラーに対応するメッセージは’result.html’に表示されます。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 @app.route('/addrec', methods = ['POST', 'GET']) def addrec(): if request.method == 'POST': try: nm = request.form['nm'] addr = request.form['add'] city = request.form['city'] pin = request.form['pin'] with sql.connect("database.db") as con: cur = con.cursor() cur.execute("INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)",(nm,addr,city,pin) ) con.commit() msg = "Record successfully added" except: con.rollback() msg = "error in insert operation" finally: return render_template("result.html", msg = msg) con.close()
result.html のHTMLスクリプトには、挿入操作結果を表示するエスケープ文{{msg}}が含まれています。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flaskサンプル</title> </head> <body> 操作結果 : {{ msg }} <h2><a href = "/">ホームページに戻る</a></h2> </body> </html>
このアプリケーションは、URL => ‘/list’は別のlist()関数を表します。この関数は、学生テーブルのすべてのレコードを含むMultiDictオブジェクトを「行」に詰め込みます。このオブジェクトはlist.htmlテンプレートに渡されます。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 @app.route('/list') def list(): con = sql.connect("database.db") con.row_factory = sql.Row cur = con.cursor() cur.execute("select * from students rows = cur.fetchall(); return render_template("list.html", rows=rows)
このlist.htmlはテンプレートで、行集合をループしてHTMLテーブルにデータを表示します。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flaskサンプル</title> </head> <body> <table border = 1> thead> <td>名前</td> <td>住所</td> <td>都市</td> <td>コード</td> </thead> {% for row in rows %} tr> <td>{{row["name"]}}</td> <td>{{row["addr"]}}</td> <td>{{row["city"]}}</td> <td>{{row['pin']}}</td> </tr> {% endfor %} </table> <a href = "}}/">ホームページに戻る</a> </body> </html>
最後に、URL => '/「規則表示する」home.html」をアプリケーションのエントリーポイントとして。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 @app.route('/) def home(): return render_template('home.html')
ここにFlask-SQLiteアプリケーションの完全なコード。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by: ja.oldtoolbag.com # Date : 2020-08-08 from flask import Flask, render_template, request import sqlite3 as sql import sqlite3 app = Flask(__name__) @app.route('/) def home(): return render_template('home.html') @app.route('/enternew') def new_student(): return render_template('student.html') @app.route('/addrec', methods = ['POST', 'GET']) def addrec(): if request.method == 'POST': try: nm = request.form['nm'] addr = request.form['add'] city = request.form['city'] pin = request.form['pin'] with sql.connect("database.db") as con: cur = con.cursor() cur.execute("INSERT INTO students (name,addr,city,pin) VALUES (?, ?, ?, ?)", (nm, addr, city, pin)) con.commit() msg = "Record successfully added" except: con.rollback() msg = "error in insert operation" finally: return render_template("result.html", msg = msg) con.close() @app.route('/list') def list(): con = sql.connect("database.db") con.row_factory = sql.Row cur = con.cursor() cur.execute("select * from students rows = cur.fetchall(); return render_template("list.html", rows=rows) @app.route('/init()) def init(): conn = sqlite3.connect('database.db') print("データベースが正常にオープンされました") conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)') print("テーブルが正常に作成されました") conn.close() return None if __name__ == '__main__': app.run(debug=True)
Pythonシェルでこのスクリプトを実行し、開発サーバーが起動したときに実行します。アクセス: http:// localhost:5000/ ブラウザでこのような簡単なメニューを表示します -
クリック 「学生情報を追加」 リンクをクリックして、学生情報フォームを追加します。
フォームに記入し、送信してください。下層関数がそのレコードを学生テーブルに挿入します。
ホームページに戻り、「リストを表示」リンクをクリックして、サンプルデータのテーブルが表示されます。