Як скинути db в Django? Я отримую команду "скинути" не знайдено помилку


98

Після цього 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

Відповіді:


153

resetбуло замінено на flushDjango 1.5, див .:

python manage.py help flush

4
На жаль, це не працює з окремими програмами, такими як manage.py reset <appname>. Це призводить до помилки: CommandError: Command не приймає жодних аргументів
Андре

5
На щастя, хтось переніс його на 1,5 :)
robertklep

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

34

Схоже, відповідь "змити" спрацює для деяких, але не у всіх випадках. Мені потрібно було не просто очистити значення в базі даних, а й правильно відтворити таблиці. Я ще не використовую міграції (перші дні), тому мені дійсно потрібно було скинути всі таблиці.

Я знайшов два способи скинути всі таблиці, обидва вимагають чогось іншого, крім основного django.

Якщо ви на Heroku, скиньте всі таблиці з pg: reset:

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

Якщо ви можете встановити розширення Django, він може виконати повне скидання:

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

6
@jonalv, спочатку потрібно встановити розширення django .
edjroot

6
Крім того, вам потрібно включити його INSTALLED_APPSв settings.py.
Макс Кандокія

21

Подібно до відповіді LisaD, Django Extensions має чудову команду reset_db, яка повністю відкидає все, замість того, щоб просто скорочувати таблиці, як це робить "flush".

python ./manage.py reset_db

Просто очищення таблиць не виправляло постійної помилки, яка виникала під час видалення об’єктів. Виконання reset_db вирішило проблему.


1
Це те, що я шукав, але мені не довелося наводити --routerаргументи, можливо, це необов’язково зараз, через п’ять років? :)
проклятий


11

Якщо ви хочете очистити всю базу даних, ви можете використовувати: python manage.py flush Якщо ви хочете очистити таблицю бази даних програми Django, ви можете використовувати: python manage.py перенести ім'я програми нуль


9

За допомогою django 1.11 просто видаліть усі файли міграції з migrationsпапки кожної програми (крім усіх файлів __init__.py). Тоді

  1. Вручну видалити базу даних.
  2. Створення бази даних вручну.
  3. Біжи python3 manage.py makemigrations.
  4. Біжи python3 manage.py migrate.

І voilla, ваша база даних була повністю скинута.


якщо ви використовуєте 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

видалений старий вміст db,

Не забудьте створити нового суперкористувача:

python manage.py createsuperuser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.