Python Django 入門トップページ


Django のマイグレーション

  1. 概要と準備
  2. マイグレーションの実行
  3. モデルの作成とマイグレーション
  4. テーブルに列を追加
  5. テストデータの投入
  6. ロールバックとテーブルの再生成
  7. テーブルに再び列を追加

Django のマイグレーション

ロールバックとテーブルの再生成

開発段階ではデータベースのロールバックを頻繁に行うことになるかもしれません.例えば comments アプリケーションのデータベースをロールバックしてみます.

(py39) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate comments zero ⏎
Operations to perform:
  Unapply all migrations: comments
Running migrations:
  Rendering model states... DONE
  Unapplying comments.0002_comment_body... OK
  Unapplying comments.0001_initial... OK

(py39) C:\Users\lecture\Documents\django\django_comment>

マイグレーションの実行状況を確認します.

(py39) C:\Users\lecture\Documents\django\django_comment>python manage.py showmigrations ⏎
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
comments
 [ ] 0001_initial
 [ ] 0002_comment_body
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial

(py39) C:\Users\lecture\Documents\django\django_comment>

comments_comment テーブルが削除されたことも確認します.(ロールバックの作業を本番システムで実行してしまうと取り返しがつかないことになってしまいますね.)

sqlite> .tables ⏎
auth_group                  auth_user_user_permissions
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session
sqlite>

ロールバックができたので,テーブルの再生成とテストデータの再投入を行います.

(py39) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate ⏎
Operations to perform:
  Apply all migrations: admin, auth, comments, contenttypes, sessions
Running migrations:
  Applying comments.0001_initial... OK
  Applying comments.0002_comment_body... OK

(py39) C:\Users\lecture\Documents\django\django_comment>python manage.py loaddata comments\fixtures\comment-data.json ⏎
Installed 10 object(s) from 1 fixture(s)

(py39) C:\Users\lecture\Documents\django\django_comment>

目次に戻る