マイグレーションファイルの生成ができたので,実際にデータベースのテーブルを生成する.まずは,データベースが空である(ファイルサイズが 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>