LoginSignup
1
0

More than 1 year has passed since last update.

Django マイグレーションの作成・削除

Posted at

モデルの作成からマイグレーションの作成・削除までの流れ

・モデルの作成〜マイグレーション
・マイグレーションを一つ前の状態に戻す
・マイグレーションを全て初期化

モデルの作成

User/models.py
from django.db import models


class User(models.Model):
    name = models.CharField(max_length=20)

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

ターミナル
# python manage.py makemigrations アプリ名 --name マイグレーションファイル名
python manage.py makemigrations User --name add_user

--nameを付けることでマイグレーションファイルの名前を指定する事ができる

マイグレートしてデータベースに反映

ターミナル
# python manage.py migrate アプリ名
python manage.py migrate User

マイグレーションの状況確認

ターミナル
python manage.py shoemigrations User
User
  [X] 0001_add_user

showmigrationsコマンドを実行するとマイグレーションの状況が確認できます。
マイグレーションファイル名の左にある角カッコの中がXとなっている場合はデータベースに反映された状態です。([X])
角カッコの中に何も表示されていない場合はデータベースに反映されていません

マイグレーションを一個前の状態に戻す場合

Userアプリに新しくPostテーブルのモデルを作成し、データベースに反映させた後、Postテーブルを反映させる前の状態に戻す方法

User/models.py
from django.db import models


class User(models.Model):
    name = models.CharField(max_length=20)

#Postテーブルを追加
class Post(models.Model):
    title = models.CharField(max_length=30)

マイグレーションを作成し、データベースに反映

ターミナル
#マイグレーションファイル作成
python manage.py makemigrations User --name add_post
User/migrations/0002_add_post.py

#マイグレート
python manage.py migrate User
Applying User.0002_add_post... OK

#マイグレーション状況確認
python manage.py showmigrations User
[X] 0001_add_user
[X] 0002_add_post

この状態からPostを反映させる前の状態に戻すには、migrateコマンドのアプリ名の後に一つ前のマイグレーションファイル名を指定します。

ターミナル
python manage.py migrate User 0001_add_user

#マイグレーション状況の確認
python manage.py showmigrations User
[X] 0001_add_user
[ ] 0002_add_post

0002_add_postのXがなくなっていると思います。
この状態でmigrationsフォルダの中にある「0002_add_post.py」を削除します。

マイグレーションを全て初期化

マイグレーションを全て初期化するにはpython manage.py アプリ名 zeroとします。

ターミナル
#マイグレーション状況確認
python manage.py showmigrations User
[X] 0001_add_user

# 0001_add_userをマイグレート前に戻す
python manage.py migrate User zero

#マイグレーション状況の確認
python manage.py showmigrations User
[ ] 0001_add_user
1
0
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
1
0