これらのテーブルのデータを失うことなく、データベーススキーマをアップグレード(変更)する(Djangoモデルに追加するだけで新しいフィールドをテーブルに追加する)場合の最善の解決策は何ですか?「syncdb」はもちろんそれらを追加しないので、テーブルを削除せずにテーブルを変更し、syncdbで再作成する方法についてアドバイスが必要です。
3 に答える
南部が選択肢にないときは、小さな変更のために手動でスクリプトを書くだけです。そして私が使っている大きなもの
./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
ます。