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

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

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

4 ответов


если вы не заботитесь о данных:

лучшим способом было бы удалить базу данных и запустить syncdb снова. Или вы можете запустить:

Для Django >= 1.5

python manage.py flush

Для Django

python manage.py reset appname

(вы можете добавить --no-input до конца команды, чтобы пропустить интерактивное приглашение.)

если вы заботитесь о данных:

документы:

syncdb будет создавать только таблицы для модели, которых еще нет было установленный. Это не проблема переделать Инструкции 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), но я не пробовал.


используя Расширения Django, работает:

./manage.py reset_db

очистить все таблицы базы данных, затем работает:

./manage.py syncdb

воссоздаст их (Юг может попросить вас перенести вещи).


Я думаю, что Джанго docs явно упомяните, что если намерение состоит в том, чтобы снова начать с пустой БД (что, похоже, является намерением OP), то просто отбросьте и повторно создайте базу данных и повторно запустите migrate (вместо flush):

Если вы предпочитаете начать с пустой базы данных и повторно запустите все миграции, вы должны удалить и воссоздать базу данных, а затем запустить вместо этого мигрируйте.

поэтому для случая OP нам просто нужно кому:

  1. отбросьте базу данных из MySQL
  2. пересоздать базу данных
  3. выполнить python manage.py migrate

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

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

внимание:

  • может работать в Windows неправильно.
  • может сохранить некоторые старые таблицы в db