違いは何ですか --fake-initial
および--fake
in Django=移行?偽の移行を使用することの危険性は?誰でも知っていますか?どうもありがとうございました。
私はDjango 1.10を使用しています
さて、ドキュメントはこれについて非常に明確です
Django=は、その移行のすべてのCreateModel操作によって作成されたすべてのモデルの名前を持つすべてのデータベーステーブルが既に存在する場合、アプリの初期移行をスキップします。このオプションは、ただし、このオプションは、一致するテーブル名を超えて一致するデータベーススキーマをチェックしません。
あなたはリスクについて尋ねていました、よくここにあります
既存のスキーマが初期移行で記録されたものと一致すると確信している場合にのみ安全に使用できます。
Django=に、移行を適用済みまたは未適用としてマークしますが、データベーススキーマを変更するために実際にSQLを実行することはありません。
これは、上級ユーザーが手動で変更を適用する場合、現在の移行状態を直接操作することを目的としています。
もう一度リスクが明確に強調されています
--fakeを使用すると、移行状態テーブルが、移行を正常に実行するために手動リカバリが必要になる状態になるリスクがあることに注意してください。
この回答は、Djangoバージョン1.8+だけでなく、他のバージョンでも有効です。
編集2018年11月:私は時々、ここや他の場所で、データベースを削除するように提案する回答を見ます。それは正しいことではありません。データベースを削除すると、すべてのデータが失われます。
@ e4c5はすでにこの質問について答えを出していますが、--fake
および--fake-initial
。
本番のデータベースがあり、それを開発に使用し、データを破壊せずに移行を適用するとします。その場合は--fake-initial
が便利です。
--fake-initial
は、強制的にDjangoに移行ファイルを確認させ、基本的にデータベースに既に存在するテーブルの作成をスキップします。ただし、テーブルを作成しない移行は、むしろ既存のテーブルを変更する)が実行されます。
逆に、移行ファイルがある既存のプロジェクトがあり、既存の移行の履歴をリセットする場合は、--fake
が通常使用されます。
短い答え
--fake
しない移行を適用する--fake-initial
可能性あり、または可能性なし移行の適用より長い答え:
--fake
:DjangoはDjango_migrations
と呼ばれるテーブルを保持して、過去にどの移行を適用したかを把握し、誤って再度適用しないようにします。すべて--fake
は、そのテーブルに移行ファイル名を挿入します実際に実行せずに移行。これは、データベーススキーマを最初に手動で変更し、後でモデルを変更し、Djangoのアクションをバイパスする場合に便利です。そのステップの間、あなたは自分でいるので、一貫性のない状態に陥らないように注意してください。
--fake-initial
:データベースの状態に依存
--fake
のように機能します。 テーブルの実際のスキーマではなく、名前のみがチェックされるため、再度注意してください--fake-initial
は、移行ファイルのクラスにinitial=True
がある場合にのみ考慮されることに注意してください。そうでない場合、フラグは無視されます。また、これは、移行におけるinitial=True
の唯一の文書化された使用法です。