【Python】Alembicでマイグレーションを実装する方法

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

SQLAlchemyのモデルを変更するたびに、本番のテーブル定義を手作業で直していて事故が怖い」とお考えではありませんか?

SQLAlchemyでモデルを追加・変更するたびに、開発環境と本番環境のテーブル定義がずれてしまう経験は珍しくありません。

Alembicを導入すれば、モデルの変更履歴をコードとして管理し、コマンド一発でスキーマを反映できるようになります。

いずみ

導入手順自体はシンプルなので、サクッと解説します。

ということで、本記事ではPythonでAlembicを使ってデータベースマイグレーションを実装する方法を解説します。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

【Python】Alembicでマイグレーションを実装する方法

早速ですが、PythonでAlembicを使ってデータベースマイグレーションを実装する手順を紹介します。

Alembicの準備

まずは、Alembicのインストールと初期設定を行います。

STEP
Alembicをインストールする

pipでAlembicとSQLAlchemyをインストールします。

pip install alembic sqlalchemy
STEP
alembic initで環境を作成する

プロジェクトのルートで初期化コマンドを実行します。

alembic init alembic

実行すると、設定ファイルのalembic.iniと、マイグレーションスクリプトを格納するalembicディレクトリが生成されます。

いずみ

ディレクトリ名は自由に決められますが、そのままalembicにしておくのが分かりやすいです。

STEP
接続先とモデルを設定する

alembic.inisqlalchemy.urlに、接続先データベースのURLを設定します。

sqlalchemy.url = postgresql+psycopg2://user:password@localhost:5432/app_db

次に、alembic/env.pytarget_metadataに、SQLAlchemyのモデルが持つメタデータを渡します。

from app.models import Base

target_metadata = Base.metadata

設定するとAlembicがモデルの現在の状態とデータベースの状態を比較できるようになり、差分の自動検出が可能になります。

マイグレーションファイルの作成と適用

準備ができたら、実際にマイグレーションファイルを作成して適用します。

STEP
モデルを定義する

まず、テーブルに対応するモデルをSQLAlchemyで定義します。

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    name = Column(String(100), nullable=False)
    email = Column(String(255), unique=True, nullable=False)
STEP
revision –autogenerateでマイグレーションファイルを作る

--autogenerateオプションを付けてrevisionコマンドを実行すると、モデルとデータベースの差分からマイグレーションファイルが自動生成されます。

alembic revision --autogenerate -m "create users table"

生成されたalembic/versions/配下のファイルには、upgrade()関数とdowngrade()関数が自動で書き込まれます。

いずみ

自動生成されたファイルはそのまま使わず、必ず中身を目で確認する癖をつけておくと安心です。

STEP
upgrade headでデータベースに反映する

マイグレーションファイルの内容を確認したら、upgradeコマンドでデータベースに反映します。

alembic upgrade head

headを指定すると、最新のリビジョンまで一括で適用されます。

downgradeとマイグレーション履歴の確認

マイグレーションを適用した後に元の状態へ戻したい場合や、現在の状態を確認したい場合のコマンドも押さえておきます。

# 1つ前のリビジョンに戻す
alembic downgrade -1

# 現在適用されているリビジョンを確認する
alembic current

# マイグレーションの履歴を一覧表示する
alembic history

downgradeは、テーブル削除やカラム削除を含むマイグレーションでは元データが失われるため、本番環境で実行する前に必ずバックアップを取っておく必要があります。

いずみ

本番でdowngradeを使う場面はそう多くないですが、いざという時のために手順は確認しておいた方がいいです。