英語字幕DB作成への道_SQLite編② (Flaskとの連携)
今日はこちらのサイトを参考に、FlaskとSQLiteを連携してみました。
flask.palletsprojects.com
ポイント① DBのコネクションを使いわす & 必ず閉じる
import sqlite3 from flask import g DATABASE = '/path/to/database.db' def get_db(): db = getattr(g, '_database', None) if db is None: db = g._database = sqlite3.connect(DATABASE) return db @app.teardown_appcontext def close_connection(exception): db = getattr(g, '_database', None) if db is not None: db.close()
上記のコードを書くことで、「1つのリクエストの中で1つのコネクションを使い回せる」&「リクエスト終了時に自動的にコネクションを閉じる」ということができるようになるようです。
要は無駄なコネクションを作りすぎたり、消し忘れたりすることがなくなるってことですね。
正直なところ、これをやらなかったときにどんなリスクがあるかは分かっていないので、
それはまた別の機会に調べてみたいと思います。
ポイント② DBの初期化はこう書いておくと便利
def init_db(): with app.app_context(): db = get_db() with app.open_resource('schema.sql', mode='r') as f: db.cursor().executescript(f.read()) db.commit()
こんな風にapp_context()を使って書くことで、
pythonのshellから get_db()を使うことができて便利だそうです。
これはアプリケーションコンテキストを理解していないと、
便利さを完全には理解できなさそうです。
from yourapplication import init_db init_db()
少し込み入った話になってきました!
勉強することも増えてきたので、ドキュメントを読み込まなくては。
今日も一歩前進できて良かったです