it-roy-ru.com

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

Следуя этому Django на примере обучения здесь: 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
72
Prem

reset был заменен на flush с Django 1.5, см.

python manage.py help flush
122
robertklep

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

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

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

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

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

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

Как и в ответе LisaD, Django Extensions имеет замечательную команду reset_db, которая полностью отбрасывает все, а не просто обрезает таблицы, как это делает "flush". Вы должны указать маршрутизатор, поэтому он может выглядеть так:

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

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

17
aendrew

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

python manage.py flush 

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

12
Vaibhav Gupta

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

  1. Вручную удалить базу данных.
  2. Вручную создайте базу данных.
  3. Запустите python3 manage.py makemigrations.
  4. Запустите python3 manage.py migrate.

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

8
Gursimran Singh

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

6
Abhijeet Padhy

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

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
4
yask

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

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

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

2
Jan

Если вы используете миграцию, эта ссылка имеет несколько решений в зависимости от сценария.

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

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

0
Bikram Pandit