Как сбросить 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: Команда не принимает никаких аргументов
Андре
5
К счастью, кто-то портировал его обратно на 1.5 :)
robertklep 06
спасибо, полезно знать, недавняя (последняя модификация 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
LisaD
источник
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
18

если вы используете Django 2.0 Тогда

python manage.py flush 

будет работать

Вайбхав Гупта
источник
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
Сусита Дипал
источник