Какой самый простой способ очистить базу данных от CLI с manage.py в Django? - PullRequest
73 голосов
/ 26 июня 2011

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

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

Ответы [ 4 ]

128 голосов
/ 26 июня 2011

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

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

Для Django> = 1,5

python manage.py flush

Для Django <1,5 </p>

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), но я не пробовал.

4 голосов
/ 15 апреля 2014

Использование Расширения Django , запуск:

./manage.py reset_db

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

./manage.py syncdb

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

3 голосов
/ 30 января 2018

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

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

Так что для случая ОП нам просто нужно:

  1. Удалить базу данных из MySQL
  2. Воссоздать базу данных
  3. Выполнить python manage.py migrate
0 голосов
/ 27 июня 2011

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

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

Внимание:

  • Может некорректно работать в Windows.
  • Может быть, некоторые старые таблицы хранятся в БД
...