Flask-Migrate でデータベースマイグレーション

Flask-Migrate は SQLAlchemy のマイグレーションツール Alembic を Flask で使いやすくする拡張である。モデルの変更をデータベースに反映するための履歴管理ができる。

セットアップ

pip install flask-migrate
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)

初期化

マイグレーション環境を初期化する。

flask db init

これで migrations ディレクトリが作成される。このディレクトリはバージョン管理に含めること。

マイグレーションの作成

モデルを変更したら、マイグレーションファイルを生成する。

flask db migrate -m "Add email column to user"

-m オプションでコミットメッセージのようなコメントを付けられる。生成されたファイルは migrations/versions/ に保存される。

マイグレーションの適用

flask db upgrade

これでデータベースが最新の状態に更新される。

ロールバック

1つ前の状態に戻すには downgrade を使う。

flask db downgrade

主要なコマンド

flask db initマイグレーション環境の初期化
flask db migrateマイグレーションファイルの生成
flask db upgradeマイグレーションの適用
flask db downgrade1つ前にロールバック
flask db historyマイグレーション履歴の表示
flask db current現在のリビジョンを表示

注意点

自動生成されたマイグレーションファイルは、必ず内容を確認してから適用すること。特に以下の変更は自動検出されにくい。

テーブル名やカラム名の変更
制約の追加・削除
カラムの順序変更

これらは手動でマイグレーションファイルを編集する必要がある。