2013-06-09 6 views
5

Próba wyświetlenia kodu SQL, który syncdb wygenerowałby w bieżącej chwili.Django pobierz instrukcję syncdb sqlall, aby zaktualizować po zmianach kodu.

Po kilku wyszukiwań odpowiedź nie była oczywista - Wiem, można użyć:

python manage.py syncdb --sqlall 

powraca:

Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created. 

Jak mogę wyjście zmiany, które miały miejsce przez cały baza danych, jeśli kod w ogóle się zmienił?

Czy istnieje sposób na wygenerowanie wszystkich SQL dla wszystkich aplikacji, które wymagają synchronizacji w tym czasie? Czy muszę po prostu jawnie podać każdą aplikację? Nie szukam całego SQL dla całej witryny, tylko dla zmian, które zostałyby zaimplementowane przez syncdb.

Mam kilka aplikacji, które wymagają generowania sql, aby opisać zmiany. Mogę je jawnie wymienić, ale czy istnieje sposób dla syncdb, aby to dla mnie wymyślić?

Odpowiedz

6

Można zrobić

./manage.py sqlall <app_name> 

uzyskać sql statements and initial data for the app.

Jeśli chcesz tylko sql statements,

./manage.py sql <app_name> 

Oto mangement command że drukuje sqlall wszystkich zainstalowanych aplikacji. Można również napisać własne polecenie zarządzania, które pobiera wszystkie zainstalowane aplikacje i wywołuje ./manage.py sql <app_name> dla każdego z nich.

+0

Dzięki kathikr - Ale czy istnieje sposób na generowanie wszystkich stwierdzeń dla wszystkich aplikacji, które są teraz dostępne?(gdy klikam na twój link) –

+1

Możesz określić wiele aplikacji (oddzielonych spacjami) w linii poleceń. Ale nie wierzę, że jest jedno miejsce, w którym można wydrukować "każdą" zainstalowaną aplikację. – karthikr

+0

Byłbym bardzo zainteresowany, aby wiedzieć, czy jest to sposób na wyprodukowanie wszystkich stwierdzeń dla wszystkich aplikacji - to jest prawdziwy punkt pytania. Zmieni się. Dzięki za pomoc. –

1

Pakiet Django Rozszerzenia posiada szereg zarządzania niestandardowych poleceń dla Django, jeden z tych poleceń jest sqldiff:

https://github.com/django-extensions/django-extensions/blob/master/docs/sqldiff.rst

Najpierw

sudo pip install django-extensions 

Następnie dodać Django rozszerzenia zainstalowane aplikacje

INSTALLED_APPS = (
    ... 
    'django_extensions', 
    ... 
) 

Następnie, można

python manage.py sqldiff -a 

Będziesz przedstawione z pełną listą różnic, a także długą listę ALTER tabela, która zagwarantuje, że wszystkie pola są ustawione prawidłowo (długość, null, niepodpisane, etc)

Wszelkie tabele, które nie są stworzone zostaną wymienione, a następnie można zrzucić SQL je tworzyć za pomocą

python manage.py sqlall {app_label} 

warto zauważyć, że w przypadku zmiany nazwy kolumny, będzie sqldiff próbować po prostu spadek zmienioną nazwą kolumny i cr Zyskaj nowe na swoim miejscu - więc nie kopiuj całego tekstu i nie uruchamiaj go przed rozpoczęciem produkcji bez inspekcji.