web-dev-qa-db-ja.com

Djangoのmanage.pyを使用してCLIからデータベースをクリアする最も簡単な方法は何ですか?

Django=を使用して、MySQLでWebサイトを構築しています。学習中に、モデルを頻繁に変更する必要があるため、すべてのテーブルをクリアして新しいテーブルを作成します。

ただし、syncdbは既存のテーブルには影響しません。この問題を処理するより良い方法はありますか?

76
Mirage

データを気にしない場合:

最善の方法は、データベースを削除し、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/

参照:FAQ- https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model- how-do-i-update-the-database

人々は南も推奨しています( http://south.aeracode.org/docs/about.html#key-features )、しかし私は試していません。

134
manojlds

Django Extensions を使用して、実行:

./manage.py reset_db

データベーステーブルをクリアしてから、次を実行します。

./manage.py syncdb

それらを再作成します(南からの移行を求められる場合があります)。

4
mrmagooey

Django docs 意図が再び空のDBから開始する場合(OPの意図のようです)、明示的に言及し、ドロップして再作成するだけです。データベースを再実行し、migrateを再実行します(flushを使用する代わりに):

空のデータベースから開始してすべての移行を再実行する場合は、データベースを削除して再作成してから、代わりにmigrateを実行する必要があります。

したがって、OPの場合、必要なことは次のとおりです。

  1. MySQLからデータベースを削除します
  2. データベースを再作成する
  3. 実行python manage.py migrate
3
Anupam

最速(データを含むすべてのテーブルをドロップして作成します):

./manage.py reset appname | ./manage.py dbshell

あぶない:

  • Windowsでは正常に動作しない場合があります。
  • データベースに古いテーブルを保持する場合があります
0
Udi