マイグレーションファイルの生成ができたので,実際にデータベースのテーブルを生成する.まずは,データベースが空である(ファイルサイズが 0 バイト,さらに,.tables コマンドで何も表示されない:つまりテーブルがまだない)ことを確認しておく.
(base) C:\Users\lecture\Documents\django\django_comment>dir ⏎
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は E033-4666 です
 C:\Users\lecture\Documents\django\django_comment のディレクトリ
2020/09/06  16:27    <DIR>          .
2020/09/06  16:27    <DIR>          ..
2020/09/06  16:32    <DIR>          comments
2020/09/06  16:20                 0 db.sqlite3
2020/09/06  16:20    <DIR>          django_comment
2020/09/06  16:17               692 manage.py
               2 個のファイル                 692 バイト
               4 個のディレクトリ  19,733,585,920 バイトの空き領域
(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables ⏎
sqlite> .exit ⏎
(base) C:\Users\lecture\Documents\django\django_comment>
  python manage.py migrate コマンドでマイグレーションを実行する.これにより,comments モデルのテーブルだけでなく様々なテーブルが登録されていることが確認できる.
(base) 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 contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying comments.0001_initial... OK
  Applying sessions.0001_initial... OK
(base) C:\Users\lecture\Documents\django\django_comment>
  実際に sqlite3 を操作してテーブルが作成されたことを確認するとともに,まだデータは登録されていないことも確認しておく.なお,Laravel とは異なり,生成されるテーブル名が アプリケーション名_モデル名 の形式になっていることに注意しよう.
(base) C:\Users\lecture\Documents\django\django_comment>dir ⏎ ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は E033-4666 です C:\Users\lecture\Documents\django\django_comment のディレクトリ 2020/09/06 16:46 <DIR> . 2020/09/06 16:46 <DIR> .. 2020/09/06 16:32 <DIR> comments 2020/09/06 16:46 135,168 db.sqlite3 2020/09/06 16:20 <DIR> django_comment 2020/09/06 16:17 692 manage.py 2 個のファイル 135,860 バイト 4 個のディレクトリ 19,733,000,192 バイトの空き領域 (base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎ SQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints. sqlite> .tables ⏎ auth_group comments_comment auth_group_permissions django_admin_log auth_permission django_content_type auth_user django_migrations auth_user_groups django_session auth_user_user_permissions sqlite> .schema comments_comment ⏎ CREATE TABLE IF NOT EXISTS "comments_comment" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(200) NOT NULL, "body" varchar(1000) NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL); sqlite> select * from comments_comment; ⏎ sqlite> .exit ⏎ (base) C:\Users\lecture\Documents\django\django_comment>
  また,Django では python manage.py showmigrations によって,どのマイグレーションファイルが適用済みか(どのテーブルが作成済みか)を確認できる.次の例では全てのマイグレーションファイルが適用済みであることが確認できる.
(base) 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
 [X] 0001_initial
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial
(base) C:\Users\lecture\Documents\django\django_comment>
ここで,comments に関する 0001_initial をロールバックしてテーブルを一旦削除する.
(base) 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.0001_initial... OK (base) C:\Users\lecture\Documents\django\django_comment>
  再度 python manage.py showmigrations コマンドで確認すると,comments の 0001_initial がロールバックされていることがわかる.
(base) 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
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial
(base) C:\Users\lecture\Documents\django\django_comment>
この状態で,sqlite3 でテーブルの一覧を確認すると,確かに comments_comment テーブルが削除されていることがわかる.
(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎ SQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints. 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> .exit ⏎ (base) C:\Users\lecture\Documents\django\django_comment>
再度マイグレーションを実行すると,まだ適用されていない comments の 0001_initial だけが処理され,comments_comment テーブルが再生成された.
(base) 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
(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables ⏎
auth_group                  comments_comment
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session
auth_user_user_permissions
sqlite> .exit ⏎
(base) C:\Users\lecture\Documents\django\django_comment>