Какой самый простой способ очистить базу данных из интерфейса командной строки с помощью 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.