2011-06-26 18 views

Odpowiedz

90

Jeśli nie dbają o danych:

Najlepszy sposób byłoby usunąć bazę danych i uruchomić syncdb ponownie. Albo można uruchomić:

Dla Django> = 1,5

python manage.py flush 

Dla Django < 1,5

python manage.py reset appname 

(można dodać --no-input na końcu polecenia na to, aby pominąć interaktywny wiersz .)

Jeśli nie interesują Cię dane:

Od docs:

syncdb utworzy jedynie tabele dla modeli, które nie zostały jeszcze zainstalowane. Nigdy nie wyemituje instrukcji TABLE, aby dopasować zmiany wykonane do klasy modelu po instalacji. Zmiany w klasach modeli i bazach danych Schematy często wiążą się z pewną formą niejednoznaczności w postaci , aw tych przypadkach Django musiałoby zgadywać, jakie zmiany należy wprowadzić w poprawnym . Istnieje ryzyko, że krytyczne dane zostaną utracone w procesie .

Jeśli wprowadzono zmiany w modelu i chcą zmieniać tabele bazy danych wszystkich, użyj polecenia SQL wyświetlaczu nowa struktura SQL i porównać to do istniejącej tabela schematu wypracować zmiany .

https://docs.djangoproject.com/en/dev/ref/django-admin/

referencyjny: FAQ - https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database

Ludzie również polecić Południowa (http://south.aeracode.org/docs/about.html#key-features), ale nie próbowałem go.

+4

Południowej jest naprawdę dobre dla automatycznie obsługuje migracje. Trochę się do tego przyzwyczaja, ale oszczędza wiele kłopotów z porzucaniem i odtwarzaniem baz danych podczas programowania i jest koniecznością, gdy witryna jest już dostępna i musisz zmienić strukturę db, gdy masz w niej cenne dane. – thepeer

+0

Nie mam opcji resetowania "nieznany reset komend" – user798719

+10

** RESET COMMAND DEPRECIATED **. W Django 1.5 polecenie zostało zaktualizowane do 'flush'. spróbuj użyć polecenia 'python manage.py flush' lub' python manage.py flush --noinput', aby pominąć interaktywny monit. – agconti

0

Najszybszy (spada i tworzy wszystkie tabele w tym dane):

./manage.py reset appname | ./manage.py dbshell 

Uwaga:

  • może nie działać poprawnie w systemie Windows.
  • Może zachować kilka starych tabel w db
+3

'Reset' już uruchamia SQL, więc nie trzeba potokować do' dbshell'. Jeśli użyjesz komendy 'sqlreset', to po prostu wydrukowałbyś kod SQL, który możesz przesłać do powłoki w celu wykonania, ale jest to niepotrzebny krok. –

3

Korzystanie Django Extensions, prowadzenie:

./manage.py reset_db 

wyczyści tabele bazy danych, a następnie uruchomiony:

./manage.py syncdb 

je odtworzyć (South może poprosić cię o przeniesienie rzeczy).

+3

reset_db daje mi nieznane polecenie – becko

+1

@becko wykonaj to pierwsze: pip install django-extensions – FacePalm

0

myślę Django docs wyraźnie wspomnieć, że jeśli intencją jest, aby rozpocząć od pustego DB ponownie (co wydaje się być zamiar OP), a następnie po prostu usunąć i ponownie utworzyć bazę danych i ponownie uruchomić migrate (zamiast używania flush):

Jeśli wolisz zacząć od pustej bazy danych i ponownie uruchomić wszystkie migracje, należy usunąć i odtworzyć bazę danych, a następnie uruchomić migrują zamiast.

Więc na razie OP, musimy tylko:

  1. usunąć bazę danych z MySQL
  2. Odtworzenie bazy
  3. Run python manage.py migrate