アルの備忘録

本棚が足りずにいいものを探しているがなかなか見つからないので困ってる雑記ブログ

【初心者向け】はじめてDjangoとMySQLでMigrationを行う手順。

 

今回はDjangoのMigration機能を使ってDjango側でデータベースの管理を行っていきます。

 

これにより新規テーブル作成や、カラムを追加するときにsql文を作成することなく、

django側で自動管理、作成することができます。

 

非常に便利です。

まずは初めてのマイグレーションを試していきます。

公式ドキュメントを見ずに適当に進めていたので悪しからず。

 

私の記事で成功しなかったら、公式ページを見ましょう!!

 

DjangoでMySQLとの接続確認

まずはDjangoとMySQLの接続ができている前提なので、接続確認をします。

 

接続がまだの方、わからない方はこちらの記事にまとめています。

www.matematetea.com

 

DjangoのMigrationとは

今回行うMigrationについて簡単に要約してまとめてみました。

 

マイグレーションとは、Djangoがデータベースの変更を保存する手法。

ファイルに自動的に保存し、データベースに反映されるので管理がとても楽です。

 

これから作業していくmodels.pyにテーブルなどの定義を記載していくだけなので、sql文などのクエリを書く必要が無いです。

 

Migrationの手順

DjangoでMigrationを進める手順はシンプルです。

  1. モデルの作成
  2. モデルの変更の保存
  3. モデルをデータベースに反映

 

今回はまだ何もしていない段階からの実行になります。

一緒に進めていきましょう。

 

models.pyの作成

まずはモデルの作成です。

models.pyにテーブルを定義していきます。

私の場合は作成したDjangoのアプリにmodels.pyが無かったので、

アプリのディレクトリ直下にmodels.pyのファイルを作成しました。

 

今回はuser_infoというテーブルを作成します。

models.pyにユーザー情報を管理するテーブルで適当なカラムを設定します。

from django.db import models

class UserInfo(models.Model):
    
    # 各フィールド情報を定義
    id = models.AutoField  # 自動採番でidを付与
    user_name = models.CharField(max_length=255, blank=True)  # ユーザー名
    password = models.CharField(max_length=255, blank=True)  # パスワード情報
    auth_flg = models.IntegerField(default=0)  # 権限フラグ
    del_flg = models.BooleanField(default=False)  # 削除有無

    
    # テーブル名の定義
    class Meta:
        db_table = 'user_info' 

 

python manage.py makemigrations

次にモデルの変更の保存を行います。

仮想環境で次のコマンドを実施

python manage.py makemigrations

 

実施するとmigrations配下に0001_initial.pyが作成されます

また、定義したモデルも作成されました。

python manage.py makemigrationsを実行した結果

 

python manage.py migrate アプリ名

最後に次のコマンドを実行して、データベースに反映させます。

python manage.py migrate アプリ名

 

実行して成功すると画像のように「OK」と表示されます。

0001_initialファイルがデータベースに反映されたようです。

migrationの成功例

 

MySQLでテーブルを確認

最後にMySQL、もしくはMySQL Workbenchからマイグレーションが反映されているのか確認。

 

user_infoテーブルが作成されているので成功です。

DjangoのMigrationが反映されているかをWorkbenchから確認

 

フィールドを設定するチートシートが欲しい

models.pyでテーブルのカラムを設定する際に、

各カラムのフィールドの設定一覧を用意しておくと便利です。

 

たいてい公式のドキュメントに記載されていますね。

モデルフィールドリファレンス | Django ドキュメント | Django

docs.djangoproject.com