python flask 入門 No.2

Python

前回の記事でflaskを使ったWEBアプリケーションをサーバーで立ち上げ、テストページを表示するところまで行いました

今回は、WEBアプリケーションとしての役割を持たせるために、SQLAlchemyというライブラリを使用してデータベースと接続する機能を追加していきます

前回の記事はこちらです

・環境

Windows 11
Flask 3.1.0
SQLAlchemy 2.0.37

・ライブラリのインストール

pip install flask SQLAlchemy

・ディレクトリ構成

project/
├── flaskr/
│   ├── __init__.py      # アプリケーションの初期化、SQL接続
│   ├── main.py     
│   └── templates/ 
│       └── index.html   # インデックスページ
└── run.py                       # アプリケーションの起動スクリプト

・データベース連携

__init__.pyにて、SQLAlchemyを使ってデータベースと接続します

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    db.init_app(app)

    with app.app_context():
        from . import models, views
        db.create_all()

    return app

SQLAlchemyを使ったデータベース連携は以前の記事でも紹介しているので参考にしてください

コードの解説

以前の記事で紹介していない部分を解説していきます

app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS’] = False

デフォルトでは、SQLAlchemyはモデル変更を追跡するためのイベント通知システムを有効にしていますが、これは余分なメモリ消費を伴います
この設定をFalseにすることで、追跡を無効化し、パフォーマンスの向上を図ります
この設定を有効にしなくてもアプリは動作しますが、警告メッセージが出るため、通常は無効化します

db.init_app(app)

FlaskアプリケーションとSQLAlchemyオブジェクトをリンクします
dbはSQLAlchemyのインスタンスで、アプリケーション全体でデータベース操作を行うためのオブジェクトです
このメソッドを呼び出すことで、app(Flaskアプリケーション)にデータベースの設定や機能を統合します

with app.app_context():

アプリケーションコンテキストを明示的に作成します
Flaskはアプリケーションの状態(リクエスト、データベース接続など)を管理するために「アプリケーションコンテキスト」を使用します
通常、アプリケーションがリクエストを処理している間は自動的にコンテキストが有効ですが、スクリプトレベルでデータベース操作を行う場合には、手動でコンテキストを有効化する必要があります

from . import models, views

アプリケーションで使用するモジュールをインポートします
この時点でmodels.pyとviews.pyを読み込みます
特に、models.pyではデータベースモデルが定義されており、これをインポートすることで、db.create_all()が正常に機能するようになります

db.create_all()

データベースに定義されたテーブルを作成します
モデルクラス(例: Todo)で定義したテーブル構造に基づいて、SQLiteデータベース(todo.db)にテーブルを作成します
既存のテーブルがある場合は何も変更せず、無い場合のみ新しく作成します

return app

初期化が完了したFlaskアプリケーションインスタンスを返します
この戻り値を使って、アプリケーションを実行したり、ビューを登録します

次回の記事では、この連携したデータベースにテーブルを定義して使用できるようにコードを追加していきます

コメント