2011-11-29 12 views
26

Czy można selektywnie filtrować, który zapisuje dane wyjściowe polecenia zarządzania dumpdata Django? Mam kilka modeli, każdy z milionami wierszy, i chcę tylko zrzucić rekordy w jednym modelu pasującym do określonych kryteriów, a także wszystkie powiązane rekordy z kluczem obcym, odnoszące się do dowolnego z tych rekordów.Django Selective Dumpdata

Weź pod uwagę ten przypadek. Załóżmy, że mam produkcyjną bazę danych, w której mój model użytkownika ma miliony rekordów. Mam kilka innych modeli (Dziennik, Transakcja, Zakup, Zakładki, itp.), Wszystkie odnoszące się do modelu Użytkownika. Chcę rozwijać program w mojej aplikacji Django i chcę przetestować używając realistycznych danych. Jednak moja baza danych produkcji jest tak ogromna, że ​​nie mogę realistycznie zrobić migawki całej rzeczy i załadować ją lokalnie. Idealnie, chciałbym użyć dumpdata do zrzucenia 50 losowych rekordów User i wszystkich powiązanych rekordów do JSON i użyć go do zapełnienia bazy danych programowania.

Czy istnieje prosty sposób na osiągnięcie tego?

+1

Dobre pytanie. Czasami chcesz również usunąć niektóre pola (takie jak hasła itp.), Jeśli chcesz, aby dane te były upubliczniane. – Mitar

Odpowiedz

16

Wydaje mi się, że warto na nie rzucić okiem django-fixture-magic.

Znajdziesz dodatkowe informacje dodatkowe w Scrubbing your Django database.

+0

Musiałem nieco poprawić ten kod, a nawet wtedy jest to trochę nieefektywne, ale generalnie działa to dla mnie. – Cerin

+0

tak, ja też: https://github.com/davedash/django-fixture-magic/issues/45 – daigorocub

3

To nie jest prosta odpowiedź na moje pytanie, ale znalazłem kilka interesujących dokumentów na temat wbudowanego w Django kodu natural keys feature, który pozwoliłby reprezentować serializowane rekordy bez klucza podstawowego. Niestety, nie wygląda na to, że jest w pełni zintegrowany z dumpdata, i jest stary outstanding ticket, który w pełni polega na naturalnych kluczach.

Wygląda na to, że funkcja serializers.serialize() umożliwia serializację dowolnej listy konkretnych instancji modelu.

Prawdopodobnie, jeśli zaimplementowałem metodę natural_key() we wszystkich moich modelach, a następnie wywołam serializers.serialize ([Users.objects.filter (criteria)]), powinien zbliżyć się do spełnienia moich oczekiwań. Być może będę musiał napisać funkcję, aby zaindeksować wszystkie odwołania FK i uwzględnić te na liście obiektów przekazanych do serializowania().

5

Ten fragment może być pomocne dla Ciebie (wynika relacje i serializes nich):

http://djangosnippets.org/snippets/918/

Można również użyć tego polecenia zarządzania i zastąpić menedżerów domyślne cokolwiek modele chciałbyś powrócić zwyczaj zestawy zapytań.

+1

poprawiono/zaktualizowano widelec powyższego urywka: https://djangosnippets.org/snippets/10506/ – tutuDajuju

Powiązane problemy