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 × SQLAlchemy で MySQL のスキーマ管理を整理してみた

Posted at

はじめに

このドキュメントでは、Python のマイグレーションツール「Alembic」を使って、MySQL データベースのスキーマ管理を始めるための初期設定手順を紹介します。

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

書こうと思ったきっかけ

受講しているITスクールでバックエンドの作業を担当している中で、実際に開発プロジェクトで Alembic を使おうとしたとき、最初の設定手順や alembic.ini の書き方でつまずいた経験がありました。

自分自身の備忘録として、また他の人の参考にもなるように、基本的な設定手順を整理しておこうと思ったのがきっかけです。


Alembic を使ったマイグレーション管理の初期設定手順

Python のマイグレーションツール「Alembic」を使って、MySQL データベースのスキーマ管理を始めるための初期設定手順を以下にまとめます。


1. Alembic のインストール

まず、Alembic を Python 環境にインストールします。

pip install alembic

2. Alembic の初期化

方法1:マイグレーションディレクトリを作成する場合

alembic init migrations

このコマンドで migrations/ ディレクトリが作成され、必要なテンプレートファイルが展開されます。

方法2:カレントディレクトリに初期化する場合

alembic init .

プロジェクト直下に Alembic 関連のファイルを展開したい場合はこちらを使用します。


3. 設定ファイル(alembic.ini)の編集

初期化すると alembic.ini が作成されるので、以下のように接続先のデータベース情報を設定します。

sqlalchemy.url = mysql+pymysql://root:root-password@host:port/database

設定例:

sqlalchemy.url = mysql+pymysql://root:mysecretpassword@localhost:3306/mydatabase

この設定により、Alembic は指定した MySQL データベースに接続し、マイグレーションを実行できるようになります。


補足

  • Alembic は SQLAlchemy と連携して使うのが一般的です。
  • env.pyversions/ フォルダも後続の作業で活用します。
  • 初期設定が完了したら、モデルの変更に応じてマイグレーションファイルを生成し、upgrade コマンドでデータベースに反映していきます。

今後のステップ:

  • SQLAlchemy モデルの定義
  • alembic revision --autogenerate -m "initial" の実行
  • alembic upgrade head によるスキーマ適用

まとめ

Alembic を使うことで、SQL の知識がそこまで深くなくても、データベーススキーマの変更を安全かつバージョン管理できるようになります。

最初は設定がやや複雑に感じるかもしれませんが、一度仕組みを理解してしまえば、非常に便利なツールです。

今回の手順が、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?