Django=を使用して、MySQLでWebサイトを構築しています。学習中に、モデルを頻繁に変更する必要があるため、すべてのテーブルをクリアして新しいテーブルを作成します。
ただし、syncdb
は既存のテーブルには影響しません。この問題を処理するより良い方法はありますか?
データを気にしない場合:
最善の方法は、データベースを削除し、syncdb
を再度実行することです。または、次を実行できます。
Django> = 1.5
python manage.py flush
Django <1.5
python manage.py reset appname
(あなたは付け加えられます --no-input
コマンドの最後まで、インタラクティブプロンプトをスキップします。
データを気にする場合:
ドキュメントから:
syncdbは、まだインストールされていないモデルのテーブルのみを作成します。インストール後にモデルクラスに加えられた変更に一致するALTER TABLEステートメントを発行することはありません。モデルクラスとデータベーススキーマの変更は、しばしば何らかの形のあいまいさを伴い、そのような場合、Django=は正しい変更を推測する必要があります。重要なデータが失われるリスクがあります。過程の中で。
モデルに変更を加え、データベーステーブルを変更して一致させたい場合は、sqlコマンドを使用して新しいSQL構造を表示し、既存のテーブルスキーマと比較して変更を実行します。
https://docs.djangoproject.com/en/dev/ref/Django-admin/
人々は南も推奨しています( http://south.aeracode.org/docs/about.html#key-features )、しかし私は試していません。
Django Extensions を使用して、実行:
./manage.py reset_db
データベーステーブルをクリアしてから、次を実行します。
./manage.py syncdb
それらを再作成します(南からの移行を求められる場合があります)。
Django docs 意図が再び空のDBから開始する場合(OPの意図のようです)、明示的に言及し、ドロップして再作成するだけです。データベースを再実行し、migrate
を再実行します(flush
を使用する代わりに):
空のデータベースから開始してすべての移行を再実行する場合は、データベースを削除して再作成してから、代わりにmigrateを実行する必要があります。
したがって、OPの場合、必要なことは次のとおりです。
python manage.py migrate
最速(データを含むすべてのテーブルをドロップして作成します):
./manage.py reset appname | ./manage.py dbshell
あぶない: