それでは、使い方を見てみましょう。 まずは、django-evolutionのHPに行き、ソースをDLし、プロジェクトからパスの通っているアプリ置き場に移動させましょう。 (ちなみに、プロジェクトディレクトリ直下はデフォルトでパスが通っています。)
1 2 3 4 5 6 | $ svn checkout http://django-evolution.googlecode.com/svn/trunk/ django-evolution $ mv django-evolution project-dir $ emacs settings.py # 既にexternal_apps配下にディレクトリを展開したのでパスは通っている。 # INSTALLED_APPSに「django_evolution」の記述を追加する。 $ ./manage.py syncdb |
これで、django-evolutionがモデル定義の変更履歴を管理するためのテーブルが作成されます。従って、この時点からプロジェクト内のモデルが変更になると、evolutionが認識できるようになります。 あとは、モデル定義を変更した時に、以下のようにして、モデル定義を正しく変更するためのSQL文をGETすることができます。
1 2 3 4 5 6 7 8 | $ ./manage.py evolve --hint --sql # 当該コマンドで、変更点を反映させるSQL文を表示してくれる。 # これをコピペして、 $ psql hoge.db # データベース内で、先ほどコピペしたSQL文を直接発行して変更を反映させる。 # 直接evolutionにテーブル定義を変更することを許可する場合は、以下のようにすればOKです。 $ ./manage.py evolve --execute --hint |
でも、大量のデータが格納されている大切なテーブルを勝手に変更されるのは誰でも不安だと思いますので、--executeは付けずに、SQLを表示させて一旦妥当性を確認してテーブル定義の変更をすることをオススメいたします。
ちなみに、django-evolutionで管理しているモデル定義の変更履歴をリセットしたい場合は、以下のようにすることで実現可能です。
$ ./manage.py reset django_evolution
これで、次回以降sync dbしてもテーブル定義が変更されることはありません。
1 | $ ./manage.py reset django_evolution |
これで、次回以降sync dbしてもテーブル定義が変更されることはありません。