DjangoのDBマイグレーションにsouthを使ってみます。
Djangoのツールに"South"というモノがあるようです。
このツールを使うと、DBのマイグレーションをうまいことやってくれるようです。
プロジェクトで、既存のModelにフィールドの追加が発生したためこのツールを使ってみます。DBのマイグレーションが簡単にできるようになればもうけものです。
まずはインストール
ドキュメント"Bitbucket | The Git solution for professional teams"を見てインストールをおこないます。
自分は、Mercurialを使ってソースを取得しました。Djangoアプリの部分だけ欲しかったため、一時的なディレクトにてsetup.pyのインストール作業を実施してソースを取得しました。
Djangoにsouthアプリを追加した時点(settings.pyのINSTALL_APPSに追加)でsyncdbが必要です。southの履歴管理テーブルが後々必要になるためです。
実際にマイグレーション作業
ドキュメント"Bitbucket | The Git solution for professional teams"を見ていくつか作業をおこないます。
まずは、southにアプリの現状のModelを覚えさせます。そのため、schemamigrationを使用します。
python manage.py schemamigration APP_NAME --initial
次に、通常であればmigrateを実行します。しかし、今回のようにすでにアプリが稼働中である場合でmigrateを実行すると、すでにテーブルが存在している、とエラーがでます。そのため、最初のmigrateはスキップさせる必要があるのです。--fakeを使用してスキップさせます。
python manage.py migrate APP_NAME --fake 0001
これで、新しくModelに修正を加える環境が整いました。適当なModelを修正します。修正が完了したら、schemamigrationです。そしてmigrateまで実行します。
python manage.py schemamigration APP_NAME --auto python manage.py migrate APP_NAME
これで稼働中のアプリにsouthを追加することができました。