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
Prem
źródło
Możliwy duplikat Jaki jest najłatwiejszy sposób na wyczyszczenie bazy danych z CLI za pomocą manage.py w Django?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

155

resetzostał zastąpiony przez flushDjango 1.5, zobacz:

python manage.py help flush
robertklep
źródło
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
LisaD
źródło
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.

aendrew
źródło
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
18

jeśli używasz Django 2.0 Then

python manage.py flush 

będzie działać

Vaibhav Gupta
źródło
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

Abhijeet Padhy
źródło
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.

Gursimran Singh
źródło
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
yask
źródło
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.

Jan
źródło
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

bikram
źródło
1
python manage.py flush

usunięta stara zawartość bazy danych,

Nie zapomnij utworzyć nowego superużytkownika:

python manage.py createsuperuser
Dlatego też Deepal
źródło