Django 1.7の新機能Migrations

Django 1.6まででは作成後のモデルに変更を加える場合、手動でSQLを発行するかsouthのような外部ツールを使用する必要がありました。
ですがDjango 1.7からMigrationsと呼ばれる新機能でモデルへの変更をDBスキーマに反映できるようになりました。
今までsouthも触ったことが無かったのでこの機会にmigrationsを試してみました。

syncdbからmigrateへ

1.7からはsyncdbコマンドがdeprecatedとなりmigrateコマンドに置き換わります。(1.7リリースノート
なので新しいappを追加した際にもmigrateコマンドで反映できます。
syncdbコマンドも当面は使えるようです。

migrationファイルの作成

モデルに変更を加えた際はまずmakemigrationsコマンドを実行し、migrationファイルを作成します。

[appディレクトリ]/migrations以下にmigrationファイルが作成されるので変更通りか確認します。(複雑な変更は取りこぼすこともあるようです)
デフォルト値の無いフィールドを追加しようとすると、以下のように既存レコードに設定するための一時的なデフォルト値を入力するか中止するか選ばされます。

一時的デフォルト値を入力する場合、pythonコードを求められるので””や0などと入力します。

migrate実行

makemigrationsで作ったmigrationファイルをDBスキーマに反映するにはmigrateコマンドを使用します。

migrateコマンドを行った際に未反映のmigrationファイルが存在すると、DBスキーマの変更が行われます。

migrationsとバージョン管理

migrationsディレクトリに作成されるmigrationファイルをコミットすることで、他のマシンでも同じようにmigrationすることができます。

——–
実際触ってみると開発初期とかにコロコロモデル変更してもすぐ反映できるんで楽ですね。
ちなみにapp作成直後はmigrateを先にやってもmakemigrationsを先にやってもどっちでもいいみたいです。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする