web-dev-qa-db-ja.com

Django 1.9+でデータベースの連続的な移行をマージする方法は?

移行では、データベースの現在のデータを維持しながら、あるデータベーススキーマから別のスキーマに変換できます。 Djangoコマンドpython manage.py makemigrationsを使用して移行を作成できます

makemigrationsが実行されるたびに、000n..ファイルで検出された変更に基づいて、新しい移行ファイルmodels.pyが追加されます。

Models.pyに小さな変更を加えた後、makemigrationsを実行したいが、以前の移行がまだ使用されていないため、一緒にマージできるため、主に本番環境で各移行を実行するため、新しい移行を作成したくない場合がありますデータベースに大量のデータがある場合は時間がかかる可能性があるため、移行を事前にマージすることをお勧めします。

新しい移行0n ..を既存の移行とマージする方法0(n-1)..はありますか?

14
Pranjal Mittal

探しているコマンドは squashmigrations です。特定のアプリの未適用の移行をすべて1つのファイルにマージします。

14
Abhinav

Makemigrationsを実行したいが、以前の移行がまだ使用されていないため、新しい移行を作成したくない

これは問題ではありません。Djangoは、移行を上から下に実行します。つまり、最新の移行ファイルは、他の以前の移行ファイルが実行されるまで待機します。

本番環境で各移行を実行すると、データベースに大量のデータがある場合、多くの時間がかかる可能性があるため

データベースにはどのくらいのデータがありますか?本当に多ければ、レプリケーションと冗長なdbサーバーが既にあるはずです。この場合、読み取りと書き込みを1つのスレーブサーバーに切り替え、マスターで移行を実行します。その後、トラフィックをマスターに戻します。その前に、トラフィック間のラグが0であり、新しいスキーマがそれらの間で適切に複製されることを確認してください。

1
doniyor