こんにちは。
プログラミングを勉強しているロペです。
Flaskでデータベース(SQLite3)との連携方法を学習しましたので、自分なりに纏めて記事しました。よかったら読んでみてください。
この記事が誰かの役に立ったら幸いです。
データベースとは
データベースとは、データの共有化や統合管理、プログラムからの独立性を目的として体系化し、蓄積保存したものです。
データベースには使用目的によって様々提案されていますが、関係データベース(リレーショナルデータベース)が主流になっています。
関係データベースは、表形式でわかりやすくデータの独立性を実現しており、操作するための言語としてSQLが使われています。
このSQL言語は非常に広く浸透しており、データベースを学ぶとえば、まず「SQLを勉強する」といっても過言ではないような気がします。
詳細は以下に書いていますので、もしよかったら覗いてみてください。
SQLite3
SQLが使用されているデータベースといっても、その種類は様々で、「SQLite3」は手軽であり、「Pythonでデータベースの最初の一歩」としては向いてるようなので、本記事ではSQLlite3を採用しました。
SQLite3はSQL言語の入門として最適のようです。
Pythonの標準モジュール
Pythonには最初からSQLite3のモジュールが用意されているため、新しくインストールしたりする作業は不要です。
SQLite3の便利ツール
SQLite3はPythonに標準でモジュールが用意されているので、インストールなど必要ないのですが、SQL言語を使ってデータベースにアクセスをします。
そこで、SQLに慣れていない人のために簡単にSQLite3のデータベースを編集できるツールがあります。
本ブログでも、このツールを利用してデータベースを編集しています。
便利ツールのダウンロード方法(無料)
以下のURLから無料でツールをダウンロードすることができます。
作成したデータベース
下の図のように、id、name、mail、age値を5つ用意しました。
このテーブルを、Flaskを利用して持ってくるようなプログラムを書きました。
FlaskとSQLite3を連携させたコードの紹介と説明
これから紹介するコードで出力した画面を先に説明しておきます。
↓のようにデータベースからID,Name,Mail,Ageの値を持ってきて表示しています。
先ほど作成したデータベースの値が画面に出力されていることが分かると思います。
Flaskのコードと解説
Flaskのコードは以下のように書いています。
import sqlite3
と書いておく必要がありますので、注意してください。
from flask import Flask, render_template, request, session, url_for, redirect, jsonify,g from flask.views import MethodView import sqlite3,pickle app = Flask(__name__) # get Database Object. def get_db(): if 'db' not in g: g.db = sqlite3.connect('sample.sqlite3') return g.db # close Database Object. def close_db(e=None): db = g.pop('db', None) if db is not None: db.close() @app.route('/', methods=['GET']) def index(): mydata = [] db = get_db() cur = db.execute("select * from mydata") mydata = cur.fetchall() return render_template('index4.html',\ title='Sample code', \ message='※This is SQLite3 Database Sample!', data=mydata) if __name__ == '__main__': app.debug=True app.run()
データベースへの接続方法
データベースへの接続は
変数 = sqlite3.connect(データベースの指定)
データベースの接続を終了は
Connection.close()
で実施することができます。
このブログでは以下のように書いています。
# get Database Object. def get_db(): if 'db' not in g: g.db = sqlite3.connect('sample.sqlite3') return g.db # close Database Object. def close_db(e=None): db = g.pop('db', None) if db is not None: db.close()
connectは、引数に指定したデータベースへ接続を開始します。
get_db()という関数を定義して、その中でg.dbにconnectを設定しています。
ここで使用している「g」という値は、Flaskに用意されている特別なオブジェクトで、リクエスト事に使用するインスタンスなどを保管しておくに使います。
この「g」に保存しておくことで、同じリクエスト内ならば常に利用できるようにしています。
importに「g」を追加する必要があるので注意です。
データベースからの値取り出し方法
cur = db.execute(“select * from mydata”)
mydata = cur.fetchall()
このコードによって、データベースから全値を取得しています。
これによって、値がデータベースからもって来れたので、あとはHTMLで表示すれば完成になります。
HTMLのコードと解説
HTMLは↓のように書いています。
{% block title %} SQL {% endblock %} {% block headline %} {{title}} {% endblock %} {% block content %} <div class="mb-3" id="msg">{{message}}</div> <div id="app" class="m-3"> <div> <table class="table"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Mail</th> <th>Age</th> </tr> </thead> <tbody> {% for item in data %} <tr> <th>{{item[0]}}</th> <th>{{item[1]}}</th> <th>{{item[2]}}</th> <th>{{item[3]}}</th> </tr> {% endfor %} </tbody> </table> </div> </div> {% endblock %} {% raw %} {% endraw %} <script> // start Vue. new Vue({ el:'#app', }); </script> {% block footer %} <h5>Coryright 2020 Rope_blog </h5> {% endblock %}
{% for item in data %}でFlaskによってデータベースから取得した値を変数itemに取り出しています。
コメント