2016-10-11 3 views
-3

Django MigrationsはDjangoプラットフォームに多くの利点をもたらすと確信しています。私はちょうどそれらの利点を識別するのに苦労している。Djangoの移行 - どのようなメリットがありますか?

誰かが私にどのような状況でDjango Migrationsが有益かもしれないことを説明するかもしれません。どのようにしてソフトウェア開発者の仕事に有益でしょうか?

そのような情報がドキュメントに見つかりませんでした。たぶん、必要性がないことは明らかです。

いずれにせよ、事前に感謝の意を表します。

編集:私は十分に正確ではないことを申し訳ありません。私が上に書いたやり方は、私が意図したものではない、Django Migrationsが何か重要なことをしないことを暗示しているようです。

私はDjango Migrationsがデータベースを自分のモデルと同期させておくことを知っています。私が迷惑をかけるのは、状況がうまくいかず、手動で移行をリセットする必要があるということです。それでも、あなたの返答後、私はDjango Migrationsが彼らのやり方である理由をよりよく理解していると信じています。

+6

...データベースを移行します。 –

+0

sqlが変更され、移行更新がDBに変更されます。 –

+0

データベースを使用せずにデータベースをモデル定義と同期させるにはどうすればよいですか? – RemcoGerlich

答えて

2

時間の経過と共にコードが変更されるように、データベースレイアウトも変更されます。モデルは新しいフィールドを取得し、あなたのAppは新しいモデルを取得します。

あなたのコードは、古いファイルを置き換えて、あなたのサーバに変更しアップロードすることができます。

データベースは永続化する必要があります。データベースを別のものに上書きするだけで、ユーザーモデルに新しいフィールドが必要であると判断した場合には、10.000ユーザーに再度サインアップすることはできません。また、チーム内のすべての開発者は、自分のマシン上に独自のデータベースを持っています。これらのデータベースのスキーマは同期している必要があります。

移行では、データベースを制御された方法で変更することができます。データベースに加えた変更は、移行時に表示され、別のマシンで「再生」される可能性があります。一部の移行システムでは、アップ/ダウンの両方の移行もサポートされているため、移行を前後に行うことができます(注文事項です)。

マイグレーションがコードベースの一部であるという事実は、通常のコード配備方法を使用してバージョンの追跡と出荷を容易にします。

移行の前にDjangoはモデルをデータベースと「同期」させることができました。これにより、データベースの非破壊的な変更が有効になりました。しかし、同期中に特定の操作を実行する必要があるより複雑なシナリオは達成できませんでした。

一方、Pythonコードの移行は、移行中にカスタムコードを実行できるようにします。これにより、データベースの柔軟性と細かく制御された変更が可能になります。

+0

私はOPの混乱の原因になると思われる問題のひとつが「移行」という言葉だと思います。 Djangoの外では、私は "MySQLからPostgreSQLへの移行"や "WindowsからLinuxへの移行"のような文脈でのみこの用語を遭遇しました。私は、「データベースのアップグレード」という言葉がよかったと思います。 –

+0

実際には「スキーマ移行」と呼ばれます。 Laravel、Rails、Django、それらはすべて「マイグレーション」に短縮されています。 –

+0

この情報をありがとう。 "スキーマのアップグレード"は私の意見ではるかに正確に聞こえる。 –

1

移行により、データベースの更新を容易に維持できます。

データベースはDjangoモデルで制御します。例えば。いずれかのモデルにフィールドを追加します。

次に、移行を実行して移行できます。これらの変更は、このフィールドを追加することでSQLデータベースに複製されます。

0

あなたは、あなたのデータベースにいくつかの変更を行います。

  • 変更フィールドのデフォルト値
  • 彼らの「名前」フィールドは大文字
  • で始まるように、あなたは、すべてのユーザーエントリを更新あなたはモデルを完全に削除します

これで、データベーススキーマを変更する必要があります。

SQLを書く方法を覚えていない可能性がありますので、まずそれを行う必要があります。ああ、次にあなたが扱っている機密データは、あなたが作成していないことを確認する必要がありますあなたのテーブルを削除するときに間違いがあります(ボビーテーブルはそれほどですか?)

これは楽しいとは言えません。特に新しい人を雇って、間違ってEvilCorpsのデータを削除しないようにする必要があります。

代わりに、これらすべての操作を抽象化するフレームワークを、ソースコントロール内に格納して、それらをコミットした開発者にタグ付けして、とにかく書き込む言語にします。

開発者にとってはどんなメリットがありますか?時間と抽象 - 私が望む利点は明らかです。

関連する問題