Django zrzuca dane dla pojedynczego modelu?


144

Czy mogę wykonać dumpdataw Django tylko jeden model, a nie całą aplikację, a jeśli tak, to w jaki sposób?

W przypadku aplikacji byłoby to:

python manage.py dumpdata myapp

Jednak chcę, aby jakiś konkretny model, taki jak „myapp.mymodel”, został zrzucony. Powodem jest to, że mam kilka ogromnych 3 milionów rekordów plus zbiory danych w tej samej aplikacji, których nie chciałbym porzucić.


1
Uważam, że twoje pytanie nie jest łatwe do zrozumienia. Chcesz załadować zrzut SQL do swojej bazy danych? A może chcesz wykonać coś w rodzaju toString () na i instancji modelu?
Leonard Ehrenfried,

Odpowiedzi:


245

Od wersji 1.1 i nowszych dumpdatapolecenie zarządzania Django umożliwia zrzucanie danych z poszczególnych tabel:

./manage.py dumpdata myapp1 myapp2.my_model

Możesz także oddzielić wiele aplikacji i modeli w wierszu poleceń. Oto definicja kanoniczna:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]

17
gath, nie zrozumiał negatywnego głosu na post, który ma prawie 2 lata. Ponadto powyższy kod działał dobrze nawet z wersją 1.1. Nowe funkcje w nowych wydaniach nie unieważniają starszych odpowiedzi.
Simplyharsh

1
Jak dodać te dane do innej instancji aplikacji?
aguilarpgc

1
Aby json był czytelny dla człowieka, użyj flagi --indent 4podumpdata
Valery Ramusik

103

Jak wspomniano, nie można tego zrobić za pomocą polecenia manage.py w Django 1.0. Możesz jednak użyć skryptu, aby wyeksportować plik JSON i załadować go za pomocą loaddata:

from django.core import serializers
from myproject.myapp import models
data = serializers.serialize("json", models.MyModel.objects.all())
out = open("mymodel.json", "w")
out.write(data)
out.close()

4
To świetny skrypt, ponieważ możesz uzyskać jeszcze bardziej szczegółowy, jeśli chcesz. Jeśli zamiast tego zrobisz .filter (...) w trzecim wierszu powyżej, możesz zrzucić tylko określone rekordy, które chcesz.
Gringo Suave

1
Miły! Zdecydowanie lepsza kontrola w ten sposób.
Luis Artola

9

Weź wszystkie dane do formatu json z modelu django.

Składnia:

python manage.py dumpdata app_name.model_name

Na przykład zrzucanie danych z modelu group_permission, który znajduje się w domyślnej aplikacji auth w django.

python manage.py dumpdata auth.group_permission

Aby uzyskać wyjście, spójrz na konsolę .


6

Myślę, że masz rozwiązanie w swoim pytaniu. Możesz zrzucić pojedynczy model w następujący sposób:

./manage.py dumpdata myapp.my_model

Wypróbowałem to przed wysłaniem. nie miał szczęścia. Jestem w django 1.0. wypróbowałeś także myapp.models.mymodel?
nategood

4

Aby odnieść sukces, musiałem to powiedzieć dwa razy i dwa razy określić model, na przykład:

./manage.py dumpdata myapp2.my_model myapp2.my_model

Gdybym tylko powiedział

./manage.py dumpdata myapp2 myapp2.my_model

Zostałem zalany wszystkimi modelami w myapp2, mimo że określiłem my_model.


1

Aby obejść ten problem, możesz utworzyć inną aplikację i skopiować model, ale wskaż go do istniejącej tabeli za pomocą opcji meta db_table. Następnie możesz po prostu zrzucić skopiowane modele do nowej aplikacji. Nie ma to wpływu na istniejącą aplikację.



1

Aby zapisać to w określonym pliku:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.