2012-07-18 9 views
10

Chcę zrobić zrzut w django niezależnie od bazy danych używam i mogą być ładowane później. Polecenie "dumpdata" jest do tego idealne, ale jest to wydruk na konsoli. Co więcej, nazywam go funkcją call_command, więc nie mogę przechowywać jej zawartości w żadnej zmiennej, ponieważ jest to drukowanie danych wyjściowych na konsoli.Jak zrobić plik db dumpfile w django

Proszę dać mi znać, jak zapisać zrzut do pliku za pomocą dumpdata lub innego polecenia lub api.

Dzięki

+0

I misread pytanie początkowo, ale dodałem odpowiedź, która używa call_command . – bouteillebleu

+0

ya wielkie dzięki, tak czy owak, to bardzo pomogło :) –

Odpowiedz

18

Ty może wybrać plik umieścić wyjście dumpdata się jeśli nazywają go od wewnątrz Python stosując call_command, na przykład:

from django.core.management import call_command 

output = open(output_filename,'w') # Point stdout at a file for dumping data to. 
call_command('dumpdata','model_name',format='json',indent=3,stdout=output) 
output.close() 

Jeśli jednak spróbować nazywając to z wiersza poleceń z na przykład --stdout=filename.json na końcu polecenia dumpdata, wyświetla błąd manage.py: error: no such option: --stdout.

Więc to jest to, po prostu musisz wywołać to w skrypcie Python, a nie w linii poleceń. Jeśli chcesz, aby była to opcja linii poleceń, to przekierowanie (jak sugerowali inni) jest najlepszym wyborem.

+0

dziękuję za to, czego chcę ... –

+9

Świetna odpowiedź! Ale wcięcie = 3? Łamiesz moje pythonowe serce z czterema spacjami. – Civilian

0

W Linuksie, można po prostu rura wyjście konsoli do pliku.

manage.py dumpdata> plik

4

django-admin.py dumpdata

wyjścia na standardowe wyjście wszystkie dane w bazie danych związanej z nazwany aplikacji (s).

Jak wiadomo, można redirect standardowe wyjście do pliku:

command > file.data 
+0

To jest najlepsza odpowiedź w mojej opinii, ponieważ odpowiada ona na jego podstawowy problem: 'Daj mi znać, jak zapisać zrzut do pliku za pomocą dumpdata lub jakiegokolwiek innego polecenia lub api." Korzystanie z wbudowanego systemu Linux wydaje się być całkowicie odpowiednie. – raiderrobert

12

po prostu użyć go tak:

./manage.py dumpdata > data_dump.json 

Po tej akcji, nie będzie data_dump.json plik w katalog, w którym wykonano to polecenie.

Jest wiele opcji, ale prawdopodobnie już to wiesz. Rzeczą, którą musisz wiedzieć, jest to, jak przekierować wyjście ze standardowego wyjścia do jakiegoś pliku: wykonujesz tę czynność, wstawiając > przed nazwą pliku.

Aby dołączyć coś do pliku, należy użyć >>, ale ponieważ wyrzucasz dane z Django, a wyjście jest najbardziej prawdopodobne, JSON, nie będziesz tego chciał (ponieważ spowoduje to, że JSON będzie nieprawidłowy).

+0

możesz mi powiedzieć, jak to zrobić bez przekierowania, pamiętaj, że jest zależna od platformy –

+0

@ParitoshSingh Przekierowanie z> działa w systemie Unix (a więc w systemie OS X) i Windows; czy są inne platformy, na których to uruchomisz? – bouteillebleu

+0

@bouteillebleu ofcourse chciałbym uczynić go niezależnym od platformy, tj. Dlaczego używam danych django dump, gdyby tak było, napisałbym, że tworzenie pliku dump specyficzne dla db używam .... –

1

Ponieważ jest to wzmianka w docs, w celu zrzutu dużych zbiorów danych można uniknąć sekcji powodujących problemy i traktować je osobno.

Poniższe polecenie ma generalnie działa:

python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json 

python manage.py loaddata db.json 

W przypadku można wyeksportować później wykluczonego dane:

python manage.py dumpdata auth.permission > auth.json 

python manage.py loaddata auth.json