Jeśli nie dbasz o dane:
Najlepszym sposobem byłoby porzucenie bazy danych i syncdb
ponowne uruchomienie . Lub możesz biegać:
Dla Django> = 1.5
python manage.py flush
Dla Django <1.5
python manage.py reset appname
(możesz dodać --no-input
na końcu polecenia, aby pominąć interaktywny monit).
Jeśli zależy Ci na danych:
Z dokumentów:
syncdb utworzy tabele tylko dla modeli, które nie zostały jeszcze zainstalowane. Nigdy nie wyda instrukcji ALTER TABLE, aby dopasować zmiany wprowadzone w klasie modelu po instalacji. Zmiany w klasach modeli i schematach baz danych często wiążą się z pewną formą niejednoznaczności iw takich przypadkach Django musiałoby odgadnąć, jakie zmiany należy wprowadzić. Istnieje ryzyko, że w trakcie tego procesu zostaną utracone krytyczne dane.
Jeśli dokonałeś zmian w modelu i chcesz dopasować tabele bazy danych, użyj polecenia sql, aby wyświetlić nową strukturę SQL i porównaj ją z istniejącym schematem tabeli, aby ustalić zmiany.
https://docs.djangoproject.com/en/dev/ref/django-admin/
Źródła: FAQ - https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database
Ludzie polecają również South ( http://south.aeracode.org/docs/about.html#key-features ), ale ja tego nie próbowałem.
flush
. spróbuj użyćpython manage.py flush
lub,python manage.py flush --noinput
aby pominąć interaktywną podpowiedź.django-admin flush
zgodne z dokumentacjąKorzystanie z rozszerzeń Django , uruchamianie:
./manage.py reset_db
Czyści tabele bazy danych, a następnie uruchomi:
./manage.py syncdb
Odtworzy je (południe może poprosić cię o migrację rzeczy).
źródło
Myślę, że dokumentacja Django wyraźnie wspomina, że jeśli celem jest ponowne rozpoczęcie od pustej bazy danych (co wydaje się być intencją OP), po prostu upuść i ponownie utwórz bazę danych i uruchom ponownie
migrate
(zamiast używaćflush
):W przypadku OP wystarczy, że:
python manage.py migrate
źródło
Najszybciej (porzuca i tworzy wszystkie tabele wraz z danymi):
./manage.py reset appname | ./manage.py dbshell
Uwaga:
źródło
reset
już uruchamia SQL, więc nie ma potrzeby przesyłania dodbshell
. Jeśli użyjeszsqlreset
polecenia, to po prostu wypisze SQL, który możesz przesłać potokiem do powłoki w celu wykonania, ale jest to niepotrzebny krok.Możesz użyć biblioteki Django-Truncate, aby usunąć wszystkie dane z tabeli bez niszczenia struktury tabeli.
Przykład:
settings.py
pliku:INSTALLED_APPS = [ ... 'django_truncate', ]
źródło