Как сбросить db в Django? Я получаю команду "сбросить" ошибка не найдена


99

После этого Django by Example tutotrial здесь: http://lightbird.net/dbe/todo_list.html

В руководстве говорится:

"Это изменит макет нашей таблицы, и нам придется попросить Django сбросить и воссоздать таблицы:

manage.py reset todo; manage.py syncdb"

хотя, когда я бегу manage.py reset todo, я получаю ошибку:

$ python manage.py reset todo                                       
- Unknown command: 'reset'

Это потому, что я использую sqlite3, а не postgresql?

Может кто подскажет, какая команда для сброса базы данных?

Команда: python manage.py sqlclear todoвозвращает ошибку:

$ python manage.py sqlclear todo    
CommandError: App with label todo could not be found.    
Are you sure your INSTALLED_APPS setting is correct?

Поэтому я добавил «todo» в свой INSTALLED_APPS в settings.py и python manage.py sqlclear todoснова запустил , что привело к этой ошибке:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined

Ответы:


155

resetбыл заменен на flushDjango 1.5, см.:

python manage.py help flush

4
К сожалению, это не работает для отдельных приложений, таких как manage.py reset <appname>. Это приводит к ошибке: CommandError: Команда не принимает никаких аргументов
Андре


спасибо, полезно знать, недавняя (последняя модификация 6 месяцев назад) общедоступная документация django по фикстурам все еще (2019-07-11) говорит о 'reset': code.djangoproject.com/wiki/Fixtures
vchrizz

34

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

Я нашел два способа удалить все таблицы, оба требуют чего-то другого, кроме ядра django.

Если вы используете Heroku, удалите все таблицы с помощью pg: reset:

heroku pg:reset DATABASE_URL
heroku run python manage.py syncdb

Если вы можете установить Django Extensions, у него есть способ выполнить полный сброс:

python ./manage.py reset_db --router=default

6
@jonalv, сначала вам нужно установить django-extensions .
edjroot

6
Кроме того, вам необходимо, чтобы он был включен INSTALLED_APPSв settings.py.
Max Candocia

21

Подобно ответу LisaD, в Django Extensions есть отличная команда reset_db, которая полностью удаляет все, а не просто усекает таблицы, как это делает «flush».

python ./manage.py reset_db

Простая очистка таблиц не исправляла постоянную ошибку, которая возникала при удалении объектов. Выполнение reset_db устранило проблему.


1
Это было то, что я искал, но мне не нужно было приводить --routerаргументы, может быть, это необязательно сейчас, пять лет спустя? :)
damd


11

Если вы хотите очистить всю базу данных, вы можете использовать: python manage.py flush Если вы хотите очистить таблицу базы данных приложения Django, вы можете использовать: python manage.py migrate appname zero


9

В django 1.11 просто удалите все файлы миграции из migrationsпапки каждого приложения (все файлы, кроме __init__.py). затем

  1. Удалить базу данных вручную.
  2. Создать базу данных вручную.
  3. Беги python3 manage.py makemigrations.
  4. Беги python3 manage.py migrate.

И вуаля, ваша база данных полностью сброшена.


при использовании sqlite нет необходимости вручную создавать базу данных, python3 manage.py makemigrationsи python3 manage.py migrateмы позаботимся об этом, по крайней мере, в django 2.0
toto_tico

4

Для меня это решило проблему.

heroku pg:reset DATABASE_URL

heroku run bash
>> Inside heroku bash
cd app_name && rm -rf migrations && cd ..
./manage.py makemigrations app_name
./manage.py migrate

3

Просто продолжение ответа @ LisaD .
Начиная с 2016 года ( Django 1.9), вам необходимо ввести:

heroku pg:reset DATABASE_URL
heroku run python manage.py makemigrations
heroku run python manage.py migrate

Это даст вам новую новую базу данных в Heroku.


1
  1. Просто удалите базу данных вручную. Убедитесь, что вы сначала создали резервную копию (в моем случае db.sqlite3 - моя база данных)

  2. Запустите эту команду manage.py migrate


1
python manage.py flush

удалил старое содержимое БД,

Не забудьте создать нового суперпользователя:

python manage.py createsuperuser
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.