Tek bir model için Django dökümü verileri?


144

Bir gerçekleştirebilir miyim dumpdataiçinde Django ziyade bütün uygulamadan daha, sadece tek bir model üzerinde, ve eğer öyleyse, nasıl?

Bir uygulama için:

python manage.py dumpdata myapp

Ancak, "myapp.mymodel" gibi belirli bir modelin atılmasını istiyorum. Nedeni, bazı büyük, 3 milyon kayıtları artı, aynı app dökümü istemem veri kümeleri var.


1
Sorunu anlamak kolay değil. Veritabanınıza bir SQL dökümü yüklemek ister misiniz? Yoksa bir çeşit toString () ve bir model örneği mi yapmak istiyorsunuz?
Leonard Ehrenfried

Yanıtlar:


245

Sürüm 1.1 ve daha ileri sürümler itibariyle, Django dumpdatayönetim komutu verileri tek tek tablolardan dökmenize olanak tanır:

./manage.py dumpdata myapp1 myapp2.my_model

Komut satırında birden fazla uygulamayı ve modeli de ayırabilirsiniz. İşte kanonik tanım:

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

17
gath, neredeyse 2 yaşında olan görevdeki olumsuz oylamayı anlamadı. Ayrıca yukarıdaki kod v1.1 ile bile iyi çalıştı. Yeni sürümlerdeki yeni özellikler eski yanıtları geçersiz kılmaz.
simplyharsh

1
Ve bu verileri uygulamanın başka bir örneğine nasıl ekleyebilirim?
aguilarpgc

1
İnsan tarafından okunabilir json yapmak için bayrak kullanın --indent 4sonradumpdata
Valery Ramusik

103

Belirtildiği gibi, bunu Django 1.0'daki manage.py komutuyla yapamazsınız. Ancak, JSON dosyasını dışa aktarmak ve aşağıdakileri kullanarak yüklemek için bir komut dosyası kullanabilirsiniz 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
Bu harika bir senaryodur, çünkü isterseniz daha ayrıntılı bilgi alabilirsiniz. Bunun yerine yukarıdaki üçüncü satırda bir .filter (...) yaparsanız, yalnızca istediğiniz belirli kayıtları dökebilirsiniz.
Gringo Suave

1
Güzel! Kesinlikle daha hassas kontrol bu şekilde.
Luis Artola

9

Tüm verileri django modelinden json formatında alın.

Sözdizimi:

python manage.py dumpdata app_name.model_name

İçin , örneğin django varsayılan kimlik doğrulama uygulamasında bulunan group_permission modelinden veri damping.

python manage.py dumpdata auth.group_permission

Çıktı için konsola bir göz atın .


6

Sorunuzda çözüm olduğunu düşünüyorum. Bunun gibi tek bir modeli atabilirsiniz:

./manage.py dumpdata myapp.my_model

göndermeden önce denedim. hiç şansı yoktu. django 1.0'dayım. Ayrıca myapp.models.mymodel denediniz mi?
nategood

4

Başarı için iki kez söylemem ve modeli iki kez belirtmem gerekiyordu, örneğin:

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

Sadece söylemiş olsaydım

./manage.py dumpdata myapp2 myapp2.my_model

My_model'i belirtmeme rağmen myapp2'deki tüm modellerle sular altında kaldım.


1

Geçici bir çözüm olarak, başka bir uygulama yapabilir ve modeli kopyalayabilir, ancak db_table meta seçeneğiyle mevcut tabloya yönlendirebilirsiniz. Ardından, kopyaladığınız modelleri yeni uygulamaya dökebilirsiniz. Mevcut uygulamanız etkilenmez.


1

Model başına bir fikstür üretmek için bir yönetim komutu oluşturdum. Armatürler çalıştırılarak üretilebilir:

./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json

kodu şurada: https://gist.github.com/2394883


1

Belirli bir dosyaya yazmak için:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.