0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:Alembicのテンプレートファイル script.py.mako を読み解いてみた

Posted at

はじめに

本記事では、Alembicのテンプレートファイルである migrations/script.py.mako の役割と内容について解説します。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

AlembicはSQLAlchemyのマイグレーションツールであり、このファイルはマイグレーションスクリプトの生成において重要な役割を果たします。

書こうと思ったきっかけ

受講しているITスクールのハッカソンに参加しており、バックエンド担当の方がAlembicでマイグレーションを行っているのを見て、自分自身もテンプレートの仕組みを理解しておくべきだと感じ、備忘録としてまとめました。

migrations/script.py.mako とは?

migrations/script.py.mako は、Alembicでマイグレーションスクリプトを自動生成する際に使用されるテンプレートファイルです。

参考文献

役割

このファイルは、alembic revision --autogenerate などのコマンドを実行したときに、マイグレーションスクリプトの雛形として利用されます。

特徴

  • Makoテンプレート形式(.mako) を使用
  • Alembicの env.py 経由で呼び出される
  • 自動生成される versions/*.py のスクリプト構成を定義

テンプレートの例

"""${message}

Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}

"""

from alembic import op
import sqlalchemy as sa

def upgrade():
    ${upgrades if upgrades else "pass"}

def downgrade():
    ${downgrades if downgrades else "pass"}

このテンプレートから、以下のようなマイグレーションスクリプトが生成されます:

"""add users table

Revision ID: abc123
Revises: None
Create Date: 2025-04-16 10:00:00.000000

"""

from alembic import op
import sqlalchemy as sa

def upgrade():
    op.create_table(
        'users',
        sa.Column('id', sa.Integer, primary_key=True),
        sa.Column('name', sa.String(50))
    )

def downgrade():
    op.drop_table('users')

まとめ

migrations/script.py.mako はAlembicにおけるマイグレーションファイルのテンプレートであり、プロジェクトに応じてカスタマイズも可能です。

テンプレートの構造を理解しておくことで、マイグレーションの自動生成をより柔軟にコントロールできるようになります!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?