Каков самый простой способ очистить базу данных от CLI с помощью manage.py в Django?

Я использую Django для создания веб-сайта с MySQL. Теперь, когда я учусь, мне нужно очень часто менять модель, поэтому я хочу, чтобы все таблицы очищались и создавалась новая таблица.

Но syncdb не касается существующих таблиц. Есть ли лучший способ справиться с этой проблемой?

Ответ 1

Если вам не нужны данные:

Лучшим способом было бы сбросить базу данных и снова запустить 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), но я его не пробовал.

Ответ 2

Используя Django Extensions, выполните:

./manage.py reset_db

Очистит таблицы базы данных, а затем запустит:

./manage.py syncdb

Восстановит их (юг может попросить вас перенести вещи).

Ответ 3

Самый быстрый (сбрасывает и создает все таблицы, включая данные):

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

Внимание:

  • Невозможно корректно работать с Windows.
  • Возможно, некоторые старые таблицы хранятся в db