11

私は現在、PythonフレームワークDjangoで、将来のdbベースのWebアプリと、現在PHPで記述されているいくつかのアプリの移植版を検討しています。私の過去数年間の厄介な問題の1つは、データベーススキーマの変更を追跡し、これらの変更を本番システムに展開することでした。私もそれらを元に戻すことができることをあえて求めていませんが、もちろんテストとデバッグのためにそれは素晴らしい機能になるでしょう。ここにある他の質問(これこれなど)から、私は一人ではなく、これは些細な問題ではないことがわかります。また、そこの答えから多くのインスピレーションを見つけました。

さて、Djangoは非常に強力なようですが、上記を支援するツールはありますか?多分それは彼らのドキュメントにもあり、私はそれを逃しましたか?

4

6 に答える 6

12

DB スキーマの移行を処理するためのサードパーティ ユーティリティが少なくとも 2 つあります。 SouthDjango Evolutionです。私はどちらも試していませんが、Evolution はもう少し前から出回っていますが、South についていくつか良いことを聞いています。

また、Django wiki のSchemaEvolutionを見てください。これは、データベースの移行に関する単なる wiki ページです。

于 2008-08-21T15:20:00.040 に答える
2

前回チェックしたとき(バージョン0.97)、syncdbはテーブルを追加してDBスキーマをmodels.pyファイルと同期できますが、次のことはできません。

  • 設定されたDBの列の名前を変更または追加します。あなたは手でそれをする必要があります。
  • モデルをリファクタリングし(テーブルを2つに分割するなど)、それに応じてDBを再作成します。

Djangoスクリプトを記述して、2つの異なるマネージャーで遊んで移行を行うことは可能かもしれませんが、DBが大きい場合は、時間がかかる可能性があります。

于 2008-08-21T14:21:19.293 に答える
1

最近のDjangoConで、DBスキーマの変更に関するパネルセッションがありました。セッションのビデオがあり(Googleに感謝)、これらのユーティリティのいくつかに関するいくつかの有用な情報を提供するはずです。

于 2008-09-25T06:06:20.257 に答える
0

そして今、移住もあります。発表から:

django-evolutionは、データベーススキーマにまだ反映されていないモデルへの変更を検出し、2つを同期させるために何をする必要があるかを理解することにより、この問題に巧妙に対処しようとします。対照的に、移行は愚かなアプローチを取ります。移行のシーケンスの変更を明示的に指定する必要があります。これは、データベースを基になるモデルを反映する最新の状態にするために順番に適用されます。

これは、移行を作成する開発者にとって余分な作業を意味しますが、プロセス全体を完全に透過的にします。私たちのプロジェクトでは、おそらく機能する可能性のある最も単純なシステムを使用することにしました。

(私の太字)

于 2008-09-04T08:29:34.423 に答える
0

Django Schema Evolution Branchについて多くの良いことを聞きましたが、それらは実際のユーザーの意見でした。ほとんどの場合、箱から出してすぐに動作し、本来行うべきことを行います。

于 2008-09-07T09:41:21.087 に答える
0

U はDmigrationsを検索する必要があります。これは、django-eveoltions とは少し異なります。それはそれがしていることすべてをあなたに示し、複雑なことについてはあなたの介入を求めます。それは素晴らしいはずです。

于 2008-09-18T16:44:03.053 に答える