PythonにはSQLiteのサポートが組み込まれています。 SQlite3モジュールはPythonリリースに付属しています。 この記事では、hoを学びます
wFlaskアプリケーションはSQLiteと相互作用します。
SQLiteは、SQLクエリ言語を使用してデータベースと対話するリレーショナルデータベースシステムです。 各データベースにはテーブルを含めることができ、各テーブルにはレコードを含めることができます。
関連コース: Python Flask:Flaskを使用してWebアプリを作成する
データベースとテーブルを作成する
SQLiteデータベースは、すべてのデータを1つのファイルに保存します。 PythonコードからSQLiteデータベースを作成できます。 プログラムは、学生テーブルが作成されるSQLiteデータベース ‘database.db’を作成します。
1 2 3 4 5 6 7 8
|
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ルールにバインドされています('/enternew'
)。学生情報フォームを含むHTMLファイルを表示します。
1 2 3
|
@app.route('/enternew') def new_student(): return render_template('student.html')
|
ファイルstudent.html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
<html> <body> <form action = "{{ url_for('addrec') }}" method = "POST"> <h3>Student Information</h3> Name<br> <input type = "text" name = "nm" /></br> Address<br> <textarea name = "add" ></textarea><br> City<br> <input type = "text" name = "city" /><br> PINCODE<br> <input type = "text" name = "pin" /><br> <input type = "submit" value = "submit" /><br> </form> </body> </html>
|
レコードを追加
ご覧のとおり、フォームデータはバインディングaddrec()関数の ‘/ addrec’URLに公開されます。
addrec()関数は、POSTメソッドを介してフォームのデータを取得し、学生テーブルを挿入します。挿入操作の成功またはエラーに対応するメッセージは、「result.html」としてレンダリングされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
@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スクリプトには、挿入操作の結果を表示するエスケープステートメントが含まれています。
1 2 3 4 5 6 7 8 9
|
<!doctype html> <html> <body> result of addition : {{ msg }} <h2><a href = "">go back to home page</a></h2> </body> </html>
|
リストアイテム
このアプリケーションには、「/ list」URLで表される別のlist()関数が含まれています。これは、studentテーブルのすべてのレコードを含むMultidictオブジェクトとして「rows」にデータを入力します。このオブジェクトはlist.htmlテンプレートに渡されます。
1 2 3 4 5 6 7 8 9 10
|
@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には次のものが含まれています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
<!doctype html> <html> <body> <table border = 1> <thead> <td>Name</td> <td>Address>/td< <td>city</td> <td>Pincode</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 = "https://pythonbasics.org/">Go back to home page</a> </body> </html>
|
最後に、「/」URLルールは、アプリケーションのエントリポイントである「home.html」をレンダリングします。
1 2 3
|
@app.route("https://pythonbasics.org/") def home(): return render_template('home.html')
|
SQLiteの例
以下は、Flask-SQLiteアプリケーションの完全なコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
from flask import Flask, render_template, request import sqlite3 as sql app = Flask(__name__)
@app.route("https://pythonbasics.org/") 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)
if __name__ == '__main__': app.run(debug = True)
|
関連コース: Python Flask:Flaskを使用してWebアプリを作成する
Hope this helps!
Source link