6

これらのテーブルのデータを失うことなく、データベーススキーマをアップグレード(変更)する(Djangoモデルに追加するだけで新しいフィールドをテーブルに追加する)場合の最善の解決策は何ですか?「syncdb」はもちろんそれらを追加しないので、テーブルを削除せずにテーブルを変更し、syncdbで再作成する方法についてアドバイスが必要です。

4

3 に答える 3

10

南部が選択肢にないときは、小さな変更のために手動でスクリプトを書くだけです。そして私が使っている大きなもの

./manage.py dumpdata appname

http://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-appname-appname-appname-model

それをファイルに投げます。正規表現の置換を実行して、追加/削除されたフィールドを更新すると、そのアプリのリセットが可能になります。しばらくこれを行っていないことを認めなければなりませんが、必要に応じて、これを行うための特定のコードを入手できます。

それはでバックアップをロードしますloaddata

編集

単一モデルのDjangoダンプデータ? この質問は似ており、私が話していた情報が含まれている可能性があります。

必要な場合はお知らせください。私の古いスクリプトを掘り下げます (または、シンプルで素敵なスクリプトを書きます)。

アップデート

./manage.py dumpdata appname --indent=4 > appname.json

#open your fav text editor and do a find/replace 

./manage.py reset appname
./manage.py loaddata appname.json

それはそれを行う必要があります。検索置換を行うときは、もう持っていないフィールドを削除し、null 不可のフィールドを追加するだけで済みます。(最低限)。

注: --indent=4 は、すべてを適切にフォーマットします。4つのスペースを意味します。./manage.py のリセットは、django 1.3 より前のバージョン (gah!) でのみ機能します。django 1.3 では、 and を実行する必要が./manage dbshellありdrop tableます。そのためのSQLは command から見つかり./manage.py sqlreset appnameます。

于 2011-04-21T06:05:24.287 に答える