Flask-sqlite
フラスコ– SQLite
Pythonには SQlite の組み込みサポートがあります。 SQlite3モジュールはPythonディストリビューションに同梱されています。 PythonでのSQLiteデータベースの使用に関する詳細なチュートリアルについては、リンク:/sqlite/sqlite_python [このリンク]を参照してください。 このセクションでは、FlaskアプリケーションとSQLiteの相互作用を確認します。
SQLiteデータベース*「database.db」*を作成し、その中に学生のテーブルを作成します。
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ファイルをレンダリングします。
@app.route('/enternew')
def new_student():
return render_template('studentl')
*‘studentl’* のHTMLスクリプトは次のとおりです-
<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 メソッドによってフォームのデータを取得し、studentsテーブルに挿入します。 挿入操作の成功またはエラーに対応するメッセージは ‘resultl’ にレンダリングされます。
@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("resultl",msg = msg)
con.close()
*resultl* のHTMLスクリプトには、 *Insert* 操作の結果を表示するエスケープステートメント *\ {\ {msg}}* が含まれています。
<!doctype html>
<html>
<body>
result of addition : {{ msg }}
<h2><a href = "\">go back to home page</a></h2>
</body>
</html>
アプリケーションには、 ’/list’ URLで表される別の* list()関数が含まれています。 学生テーブル内のすべてのレコードを含む *MultiDict オブジェクトとして 'rows' を設定します。 このオブジェクトは listl テンプレートに渡されます。
@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("listl",rows = rows)
この listl はテンプレートであり、行セットを反復処理し、データをHTMLテーブルにレンダリングします。
<!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 = "/">Go back to home page</a>
</body>
</html>
最後に、 ‘/’ URLルールは、アプリケーションのエントリポイントとして機能する ‘homel’ をレンダリングします。
@app.route('/')
def home():
return render_template('homel')
*Flask-SQLite* アプリケーションの完全なコードは次のとおりです。
from flask import Flask, render_template, request
import sqlite3 as sql
app = Flask(__name__)
@app.route('/')
def home():
return render_template('homel')
@app.route('/enternew')
def new_student():
return render_template('studentl')
@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("resultl",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("listl",rows = rows)
if __name__ == '__main__':
app.run(debug = True)
このスクリプトをPythonシェルから実行し、開発サーバーの実行を開始します。 ブラウザの http://localhost:5000/ にアクセスすると、次のようなシンプルなメニューが表示されます-
*[新しいレコードを追加]* リンクをクリックして、*学生情報*フォームを開きます。
フォームフィールドに入力して送信します。 基礎となる関数は、学生テーブルにレコードを挿入します。
ホームページに戻り、[リストを表示] *リンクをクリックします。 サンプルデータを示すテーブルが表示されます。