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

Djangoで開発をする際に仮想環境を構築する方法

Djangoで開発をする際にvenvを使って仮想環境を構築する方法です。pyenvがインストールされていてバージョンを切り替えできる状態を前提に進めます。 仮想環境について Pythonで開発していると開発環境では最新の […]

Posted on by press
Django

DockerのPostgreSQLコンテナのリストア

Dockerで動いているPostgreSQLにデータをリストアする方法です。書き出したPostgreSQLのdumpファイル(リストア用データ)はデスクトップに置いてあるという前提で進めます。 ディレクトリ構造 Dock […]

Posted on by press