Jak zresetować db w Django? Otrzymuję polecenie „reset”, nie znaleziono błędu


99

Po tym Django na przykładzie tutotrial tutaj: http://lightbird.net/dbe/todo_list.html

Samouczek mówi:

„To zmienia układ naszych tabel i będziemy musieli poprosić Django o zresetowanie i odtworzenie tabel:

manage.py reset todo; manage.py syncdb"

chociaż po uruchomieniu pojawia manage.py reset todosię błąd:

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

Czy to dlatego, że używam sqlite3, a nie postgresql?

Czy ktoś może mi powiedzieć, jakie jest polecenie resetowania bazy danych?

Polecenie: python manage.py sqlclear todozwraca błąd:

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

Więc dodałem `` todo '' do moich INSTALLED_APPS w settings.py i uruchomiłem python manage.py sqlclear todoponownie, co spowodowało ten błąd:

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

Odpowiedzi:


155

resetzostał zastąpiony przez flushDjango 1.5, zobacz:

python manage.py help flush

4
Niestety nie działa to w przypadku pojedynczych aplikacji, takich jak manage.py reset <appname>. Powoduje to błąd: CommandError: Command nie przyjmuje żadnych argumentów
Andre

5
Na szczęście ktoś przeportował go z powrotem na 1.5 :)
robertklep

dzięki, dobrze wiedzieć, ostatnia (ostatnio zmodyfikowana 6 miesięcy temu) publiczna dokumentacja django o oprawach wciąż (11.07.2019) mówi o 'resetowaniu': code.djangoproject.com/wiki/Fixtures
vchrizz

34

Wygląda na to, że odpowiedź „flush” będzie działać w niektórych, ale nie we wszystkich przypadkach. Musiałem nie tylko wyczyścić wartości w bazie danych, ale także poprawnie odtworzyć tabele. Nie używam jeszcze migracji (wczesne dni), więc naprawdę musiałem porzucić wszystkie tabele.

Znalazłem dwa sposoby usuwania wszystkich tabel, oba wymagają czegoś innego niż podstawowe django.

Jeśli jesteś na Heroku, upuść wszystkie stoły za pomocą pg: reset:

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

Jeśli możesz zainstalować rozszerzenia Django, ma sposób na całkowity reset:

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

6
@jonalv, musisz najpierw zainstalować rozszerzenia django .
edjroot

6
Ponadto musisz mieć to uwzględnione INSTALLED_APPSw settings.py.
Max Candocia

21

Podobnie jak w przypadku odpowiedzi LisaD, Django Extensions ma świetne polecenie reset_db, które całkowicie odrzuca wszystko, zamiast po prostu obcinać tabele, jak robi to „flush”.

python ./manage.py reset_db

Samo opróżnianie tabel nie naprawiało trwałego błędu, który występował podczas usuwania obiektów. Wykonanie reset_db rozwiązało problem.


1
Tego właśnie szukałem, ale nie musiałem przedstawiać --routerargumentów, może teraz, pięć lat później, to jest opcjonalne? :)
cholerny


11

Jeśli chcesz wyczyścić całą bazę danych, możesz użyć: python manage.py flush Jeśli chcesz wyczyścić tabelę bazy danych aplikacji Django, możesz użyć: python manage.py migrate appname zero


9

W django 1.11 po prostu usuń wszystkie pliki migracyjne z migrationsfolderu każdej aplikacji (wszystkie pliki oprócz __init__.py). Następnie

  1. Ręcznie usuń bazę danych.
  2. Utwórz bazę danych ręcznie.
  3. Biegnij python3 manage.py makemigrations.
  4. Biegnij python3 manage.py migrate.

I voilla, twoja baza danych została całkowicie zresetowana.


jeśli używasz sqlite, nie musisz ręcznie tworzyć bazy danych python3 manage.py makemigrationsi python3 manage.py migratezajmie się tym, przynajmniej w django 2.0
toto_tico

4

Dla mnie to rozwiązało problem.

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

To tylko kontynuacja odpowiedzi @ LisaD .
Od 2016 r. ( Django 1.9) Należy wpisać:

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

Dzięki temu otrzymasz nową bazę danych w Heroku.


1
  1. Po prostu ręcznie usuń bazę danych. Upewnij się, że najpierw utworzysz kopię zapasową (w moim przypadku db.sqlite3 jest moją bazą danych)

  2. Uruchom to polecenie manage.py migrate


1
python manage.py flush

usunięta stara zawartość bazy danych,

Nie zapomnij utworzyć nowego superużytkownika:

python manage.py createsuperuser
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.