Próbuję zsynchronizować dane między dwiema instalacjami django (produkcja i testowanie). Robię to za pomocą ./manage.py dumpdata --natural
na produkcji, a następnie ./manage.py loaddata
w świeżo syncdb
'ed bazy danych na temat testowania.Django: Usuń wszystkie dane z każdej tabeli (ale same tabele)
Wszystko działało poprawnie, dopóki nie dodałem nowego uprawnienia niestandardowego. Produkcja syncdb
ładowała to nowe uprawnienie w innej kolejności (z innym kluczem podstawowym) niż nowy syncdb
w pustej bazie danych. W rezultacie otrzymuje inny identyfikator. Więc mimo użyciu naturalnych klucze, gdy próbuję załadować dane, dostaję ten błąd, gdy pierwszy out-of-order przedmiot uprawnienie jest załadowany:
IntegrityError: duplicate key value violates unique constraint "auth_permission_content_type_id_codename_key"
Najłatwiej można myślę, aby to naprawić jest usunięcie wszystkich danych z każdej tabeli w testowej instalacji - to jest użycie syncdb
tylko do tworzenia tabel, a nie do ładowania danych początkowych. Ale syncdb
nie pozwala pominąć początkowego kroku danych/sygnałów. Bez wyraźnego wymieniania każdego modelu lub nazwy tabeli, w jaki sposób mogę usunąć wszystkie początkowe dane po wywołaniu syncdb
? Czy istnieje sposób na tworzenie tylko pustych tabel bez używania syncdb
?
./manage.py flush
to nie jest to, czego szukam - odświeża dane początkowe i wyzwala sygnały syncdb.
Resetowanie jest przestarzałe, ponieważ dokumenty, które podasz, wspominają; ale wymaga to wyliczenia każdej aplikacji, której chcę uniknąć. Flush jest jego zamiennikiem; ale ładuje początkowe dane. – user85461
przestarzałe nie oznacza, że nie możesz z niego korzystać. Jeśli nie chcesz wymieniać nazw aplikacji, myślę, że będziesz musiał napisać własne polecenie zarządzania. – Alasdair
Usunięto w wersji 1.5. niestety nie wygląda na to, że istnieje już sposób na spłukanie pojedynczej aplikacji :( – Andre