エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。
普段はフリーランスでシステムエンジニアをしております。
今回は、PythonのDjangoのモデルを過去のマイグレーションまでロールバックして元に戻す手順をまとめてみました。
Djangoでの開発するためにVisual Studio Code (VS Code) を使用しているため、同様に確認したい方は、こちらの記事でVS CodeでPythonの開発環境を構築してみてください。
Djangoのモデルとは(おさらい)
Djangoのモデルとは、Django上でデータベースのテーブルやフィールドを定義するものです。
Djangoのモデルからデータベースのテーブルやフィールドを定義する部分を図式化すると、下図のようになります。
Djangoのコマンドによって、models.pyからマイグレーションファイル(中間のデータベース設計図)を作成し、実際のデータベースへ反映させるという仕組みになっています。
下図は、実際にVSCode上でmodels.pyから中間の設計図を作成後、データベースへ反映させたときの状態です。
これでDjangoのモデルの全体像がわかったかと思います。
Djangoのモデルのマイグレーション履歴を確認(showmigrations)
Djangoのモデルをロールバックさせるには、モデルの過去のマイグレーション履歴を把握しておく必要があります。
Djangoのモデルのマイグレーション履歴を確認するには、以下のshowmigrationsコマンドを実行します。
【コマンド書式】
1 |
python manage.py showmigrations |
【コマンド結果】
上図からDjangoアプリ「app」には、以下の3つのマイグレーション履歴があることがわかります。
- 「0001_initial」
- 「0002_itemmodel_item_description」
- 「0003_itemmodel_item_value」
マイグレーション名の左にある[X]は、マイグレーションが適用されていることを意味します。
つまり、上図では過去3つのマイグレーション履歴がすべて反映されている状態を示しています。
Djangoのモデルを過去のマイグレーションへロールバック(migrate)
Djangoのモデルのマイグレーション履歴がわかったところで、次はロールバックをする方法を紹介します。
Djangoのモデルを過去のマイグレーションへロールバックするには、以下のmigrateコマンドを実行します。
【コマンド書式】
migrateコマンドに含まれる<Djangoアプリ名>と<マイグレーション名>については、前述で調べたマイグレーション履歴から選択します。
1 |
python manage.py migrate <Djangoアプリ名> <マイグレーション名> |
【コマンド例】
Djangoアプリ「app」で定義したモデルを「0001_initial」という設計図の履歴までロールバックしている例です。
1 |
python manage.py migrate app 0001_initial |
【コマンド結果】
showmigrationsコマンドで再度マイグレーション履歴を確認してみましょう。
0002と0003には、[ ]のようにXがなくなっており、0001にロールバックできていることがわかります。
マイグレーションファイルを削除
0001までロールバックできたことが確認できましたら、下図の赤枠に示す0002と0003のマイグレーションファイル(中間の設計図)、およびキャッシュファイルを削除しましょう。
これでDjangoのモデルを過去のマイグレーションまでロールバックする方法は以上です。
0002と0003の設計図が残ったまま、再度「python manage.py migrate」コマンドでマイグレーションを実行すると、0003まで適用した状態に戻ってしまいます。
完全に初期化する方法(zero)
次は、「0001_initial」のマイグレーション以前まで初期化するには、以下のように<マイグレーション名>に「zero」を指定します。
【コマンド書式】
1 |
python manage.py migrate app zero |
【コマンド結果】
0001~0003には、[ ]のようにXがなくなっており、0001以前までロールバックできていることがわかります。
まとめ
いかがでしたでしょうか。
Djangoに限らずデータベースの作成、更新、削除等の操作は、システム全体に影響するものです。
そのため、データベースの操作を誤ってしてしまった場合の対処方法は、エンジニアとして必ずおさえておく必要がありますので、本記事を参考にしてもらえたらと思います。
【関連記事】
【Python Django入門】使い方からWebアプリ作成までの流れ
【TIPS】Django RestFramework(DRF)のAPIサーバ開発手順と動作確認方法