Djangoでマイグレーションをやり直す


press
Djangoでマイグレーションをやり直す

Djangoでマイグレーションをやり直す

Djangoで開発中にマイグレーションを元に戻したり(ロールバック)、やり直したくなった時の方法です。部分的に戻す方法と初期化したい方法の2パターンを紹介します。

開発環境

Python 3.8.0
Django 3.1

.
├── app
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
├── rollback_migration
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── templates

まずはじめに、以下のコマンドでマイグレーション履歴を確認します。

python manage.py showmigrate

今回、作成したappというアプリケーションには0001から0003までマイグレーション履歴があります。

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
app
 [X] 0001_initial
 [X] 0002_app_title
 [X] 0003_app_active
auth
 [X] 0001_initial
...

マイグレーションのロールバック

以下のコマンドで0001_initialまで戻ります(ロールバック)します。

python manage.py migrate app 0001_initial

以下のコマンドでロールバック出来ているか確認します。

python manage.py showmigrate

Xが消えているのが確認出来たら過去のマイグレーション(0001_initial)まで戻れています。

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
app
 [X] 0001_initial
 [ ] 0002_app_title
 [ ] 0003_app_active
auth
 [X] 0001_initial
...

migrationsディレクトリにある不要になったマイグレーションファイルを削除します。今回は0001_initialに戻ったので、0001_initial以降を削除します。
※__init__.pyは消さない様に注意してください。

マイグレーションの初期化

上記の様に部分的に戻すのではなく完全に初期化したい場合は以下のコマンドで初期化できます。

python manage.py migrate app zero

python manage.py showmigrateで確認するとappのマイグレーションが初期化されているのが分かります。

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
app
 [X] 0001_initial
auth
 [X] 0001_initial
...

当ブログは群馬県でPython / Djangoを中心にウェブアプリケーションを開発している株式会社ファントムが運営しています。

株式会社ファントムへのお問い合わせ




Show Comments (0)

Comments

Related Articles

Django

Dockerを使ってDjangoとPostgreSQL環境を構築する方法

Dockerを使ってシンプルなDjangoとPostgreSQLの開発環境を構築する方法です。GitHubリポジトリをクローンして以下のコマンドを入力します。 1. Dockerイメージを作成 2. Djangoプロジェ […]

Posted on by press
Django

Djangoのi18n用にGNU gettextをインストール

Djangoのi18n用にGNU gettextをインストール 上記コマンドを実行したときにGNU gettextがインストールされていないと以下のエラーが発生します。 エラーを解決するにはGNU gettextのインス […]

Posted on by press