Если вас не волнуют данные:
Лучшим способом было бы отбросить базу данных и запустить ее 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 ), но я не пробовал.
flush
. попробуйте использоватьpython manage.py flush
илиpython manage.py flush --noinput
пропустить интерактивную подсказку.django-admin flush
соответствует документацииИспользуя Django Extensions , запустив:
./manage.py reset_db
Очистим таблицы базы данных, затем запустим:
./manage.py syncdb
Создадим их заново (юг может попросить вас перенести вещи).
источник
Я думаю, что документы Django явно упоминают, что если намерение состоит в том, чтобы снова начать с пустой БД (что, похоже, является намерением OP), просто отбросьте и заново создайте базу данных и повторно запустите
migrate
(вместо использованияflush
):Итак, в случае OP нам просто нужно:
python manage.py migrate
источник
Самый быстрый (отбрасывает и создает все таблицы, включая данные):
./manage.py reset appname | ./manage.py dbshell
Осторожно:
источник
reset
уже запускает SQL, поэтому нет необходимости использовать конвейерdbshell
. Если вы используетеsqlreset
команду, то это просто распечатает SQL, который вы можете передать оболочке для выполнения, но это ненужный шаг.Вы можете использовать библиотеку Django-Truncate для удаления всех данных таблицы, не разрушая структуру таблицы.
Пример:
settings.py
файле:INSTALLED_APPS = [ ... 'django_truncate', ]
источник