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


84

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

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

Ответы:


155

Если вас не волнуют данные:

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


4
Юг действительно хорош для автоматической обработки миграций. К этому нужно немного привыкнуть, но он избавляет от лишних хлопот, связанных с удалением и воссозданием баз данных во время разработки, и является обязательным, когда ваш сайт работает, и вам нужно изменить структуру db, пока у вас есть ценные данные.
thepeer 08

11
КОМАНДА СБРОСА УСТАРЕЛА . В Django 1.5 команда была обновлена ​​до flush. попробуйте использовать python manage.py flushили python manage.py flush --noinputпропустить интерактивную подсказку.
agconti

Юг устарел . Обратитесь сюда . И ссылка, которую вы здесь дали, не работает.
Мукеш Сай Кумар

Похоже, команда теперь django-admin flushсоответствует документации
Тодд

4

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

./manage.py reset_db

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

./manage.py syncdb

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


2
@becko сначала выполните это: pip install django-extensions
FacePalm

4

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

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

Итак, в случае OP нам просто нужно:

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

0

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

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

Осторожно:

  • Может некорректно работать в Windows.
  • Могу сохранить старые таблицы в базе данных

3
resetуже запускает SQL, поэтому нет необходимости использовать конвейер dbshell. Если вы используете sqlresetкоманду, то это просто распечатает SQL, который вы можете передать оболочке для выполнения, но это ненужный шаг.
Michael Mior

0

Вы можете использовать библиотеку Django-Truncate для удаления всех данных таблицы, не разрушая структуру таблицы.

Пример:

  1. Сначала установите django-turncate, используя терминал / командную строку:
pip install django-truncate
  1. Добавьте "django_truncate" в INSTALLED_APPS в settings.pyфайле:
INSTALLED_APPS = [
    ...
    'django_truncate',
]
  1. Используйте эту команду в своем терминале, чтобы удалить все данные таблицы из приложения.
python manage.py truncate --apps app_name --models table_name
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.