django-south使用

3321 ワード

回転元:http://alexliyu.blog.163.com/blog/static/16275449620126239949478/
Southを使う前に、彼の能力を信じて、彼に対する不信感を捨ててください.なぜなら、Southの第一印象は、操作ごとに異常を投げているようなものだからです.
Southの概要
*djangoが備えるsyncdb同期モデルとデータベースの欠陥に対して開発したデータ移行ツールは、syncdbの代わりに、Southはモデルへの変更を検出してデータベースに同期することができる.
基本的な使い方
*Southをインストールした後、djangoプロジェクトでSouthを使用するには、まずSouthをAppとしてプロジェクトにインポートするので、INSTALL_を設定します.APP追加south
*Southは初めて使用します(既存のプロジェクトのSouthへの転用については、次の手順を参照してください)
Pythonコード
收藏代码
  •   
  • python manage.py schemamigration youappname --initial   
  •   
  • #--initialはデータベースにmodels定義のテーブルを作成し、Southに必要なsouth_migrationhistoryテーブルは、youappnameディレクトリの下にmigrationsのサブディレクトリ
  • を作成します.
  • #以降modelsを変更するたびに、次の2つのコマンドを実行してデータベース
  • に同期できます.
  • python manage.py schemamigration youappname--auto#modelsへの変更を検出
  •   
  • python manage.py migrate youappnam#変更をデータベース
  • に反映
     
    Southへの移行
    *既存のプロジェクト(modelsを定義し、対応するデータベースを作成し、応答するデータを保存した)については、元のsyncdbの代わりにSouthを使用するには簡単な手順が必要です.
    *現在のINSTALLも必要アプリにsouthを追加しpython manage.py syncdb#syncdbは、south_を作成するためにSouthによって変更されました.migrationhistoryテーブル
    Pythonコード
    收藏代码
  •   
  • python manage.py syncdb#syncdbは、south_を作成するためにSouthによって変更されました.migrationhistory表
  •   
  • python manage.py convert_to_south youappname#youappnameディレクトリの下にmigrationsディレクトリを作成し、最初の移行には
  • が必要です.
     
    *今後このプロジェクトではSouthを正常に使用できるようになります
    South同期の原理
    *modelsの変更ごとにschemamigrationを実行すると、migrationsディレクトリの下に、0002_のようなファイル名のpyファイルが生成されます.autodel_field_notes_create_user.py、データベースを同期するときに順番(ファイル名ASCIIソート)にこれらのpyファイルを実行します.ファイルにはMigrationのクラスが含まれています.forwardsとbackwardsの2つの方法があります.変更をデータベースに同期するとforwardsメソッドが実行され、データベース操作に失敗するとbackwardsを呼び出してrollbackを実現します.Southは遡及のような機能も提供しています.
    You can also specify a specific migration to migrate:      * python manage.py migrate 0002_autodel_field_notes_create_user.py  Note that, if the system has already migrated past the specified migration,  it will roll back to it instead. If you want to migrate all the way back,  specify the special migration name zero:      * python manage.py migrate zero        

    よくある質問
    1.フィールドを追加および削除するときにdefault value(djangoのmodelsの多くのフィールドのデフォルトはnull=False)を入力する必要がある場合があります.フィールドを追加する場合、入力したデフォルト値はmodels定義のタイプと一致しなければなりません.そうしないと、データベースを同期するときにフィールドを削除する場合にエラーが発生します.フィールドのデフォルトタイプに関係なくvalueを任意に入力して削除することはできますが、望ましくありません.具体的な理由は、Southの実装メカニズム(rollbackがフィールドを削除する前に失敗する)を参照してください.
    2.切り札Southがデータベースの同期中にエラーが発生した場合、migrationsディレクトリの下にある今回の変更に対応するpythonファイルは実行されず、python manageを実行できます.py migrate--list実行されていないpyファイルを表示します.ファイル名の前に*がないことは、ファイルに対応する変更がデータベースに反応していないことを示します.これらの問題のあるmigrateを削除し、エラーメッセージを参照してmodelsを変更して同期すればいいです.また、対応するpyファイルを直接変更してエラーを修正することもできます.