Python 3 – FlaskSQLiteデータベース-Pythonチュートリアル

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>

フラスコSQLフォーム

レコードを追加

ご覧のとおり、フォームデータはバインディング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>

フラスコsqlite挿入が完了しました

リストアイテム

このアプリケーションには、「/ 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