Django入門その後に(6)〜migrateって何〜
今度こそ遂にようやくデータベースに反映しますがその過程について少し細かく書いていこうと思います。
マイグレートに関する3つのコマンド
マイグレートってなんぞ |
---|
マイグレーションにはざっくり3つのコマンドがあります。
- showmigration: 今のデータベースへの反映状態を表示する
- makemigraiton: models.pyの内容を読んでマイグレーションファイルを作る
- migrate: マイグレーションファイルの内容をデータベースに反映する
それぞれについて細かく見ていきましょう
①showmigrationで反映状態を確認しよう
$ python manage.py showmigrations
とコマンドを打ってみましょう
[X] 0001_initial [X] 0002_logentry_remove_auto_add 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 contenttypes [X] 0001_initial [X] 0002_remove_content_type_name info (no migrations) sessions [X] 0001_initial
多分こんな感じにでてくると思います。 最初にDjangoが標準で作るdjango_migrationsを表示しています。
②makemigration
反映状態を確認したらマイグレーションファイルを作ってみましょう。
Migrations for 'info': info/migrations/0001_initial.py - Create model Seiyuu
なんかでましたね
ここでもう一度先ほどのコマンドを叩いてみましょう
$ python manage.py showmigrations
[X] 0001_initial [X] 0002_logentry_remove_auto_add 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 contenttypes [X] 0001_initial [X] 0002_remove_content_type_name info [ ] 0001_initial ★なんかできてる! sessions [X] 0001_initial
次にフォルダを覗いてみましょう seiyuu_info/info/
0001_initial.pyというのができていますが、これがマイグレーションファイルの実体になります。infoapiには未反映の0001_initialというマイグレートファイルがあるよということですね。 ちなみに反映済みになると先頭の[]が[X]になります
3.migrate
実際に反映するにはmigrateというコマンドを打ちます。
$ python manage.py migrate
Apply all migrations: admin, auth, contenttypes, info, sessions Running migrations: Applying info.0001_initial... OK
これでデータベースにデータが反映されました。
せっかくなので実際にデータベースを開いて確認してみよう
$ sqlite3 db.sqlite3 sqlite> .schema info_seiyuu CREATE TABLE "info_seiyuu" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(255) NOT NULL, "gender" integer NULL, "birth_day" date NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
info_seiyuuというTBLが作られています。
- 名前はSeiyuuではなく [アプリケーション名]_[Djangoに書いたTBL名]で作られますが実際にDjangoで操作するときに意識することはありません。普通にSeiyuuで扱います。
- IDなんて宣言した覚えがない!→これは定義するときにPKを指定しないとDjango側でIDという名前でPKを自動で作ります。これは大事です。
れで、遂に、やっと、Djangoとデータベースが繋がりました。 ドカベンが柔道から野球を始めるまでに6巻、まどかが魔法少女になるまでに12話掛かりましたが、このチュートリアルは記事6本使って、まだMTVのMしか終わっていませんが一つ一つを丁寧に理解しながら進むことで、色々応用が利くので、ゆっくりと進みましょう。
次回はこれらを登録・更新・削除するadminサイトについて見ていこうと思います。