سؤال

هل يمكنني أداء dumpdata في جانغو على نموذج واحد فقط، بدلا من التطبيق بأكمله، وإذا كان الأمر كذلك، كيف؟

للحصول على تطبيق سيكون:

python manage.py dumpdata myapp

ومع ذلك، أريد بعض النماذج المحددة، مثل "myapp.mymodel" المراد ملقاة. السبب في أن يكون، لدي بعض البيانات الضخمة، 3 ملايين سجل بلس، في نفس التطبيق الذي لا أحب ملقيته.

هل كانت مفيدة؟

المحلول

اعتبارا من الإصدار 1.1 وأكبر، DJANGO dumpdata يتيح لك الأمر الإداري تفريغ البيانات من الجداول الفردية:

./manage.py dumpdata myapp1 myapp2.my_model

يمكنك أيضا فصل تطبيقات ونماذج متعددة في سطر الأوامر. إليك التعريف الكنسي:

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

نصائح أخرى

كما لوحظ، لا يمكنك القيام بذلك من خلال أمر إدارة. في Django 1.0. ومع ذلك، يمكنك استخدام برنامج نصي لتصدير ملف JSON، وتحميله باستخدام 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()

أعتقد أن لديك الحل في سؤالك. يمكنك تفريغ نموذج فردي مثل هذا:

./manage.py dumpdata myapp.my_model

خذ جميع البيانات في تنسيق JSON من نموذج Django.

بناء الجملة:

python manage.py dumpdata app_name.model_name

بالنسبة مثال إقليم البيانات من نموذج Group_Permission الموجود في تطبيق Auth الافتراضي في Django.

python manage.py dumpdata auth.group_permission

للإخراج إلقاء نظرة على وحدة التحكم.

للنجاح، كان علي أن أقول ذلك مرتين، وتحديد النموذج مرتين، مثل:

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

إذا قلت فقط

./manage.py dumpdata myapp2 myapp2.my_model

لقد غمرت غمرتها جميع الطرز في MyApp2، على الرغم من حقيقة أنني حددت my_model.

كحل مؤقت، يمكنك تقديم تطبيق آخر ونسخ النموذج ولكنه يشير إلى الجدول الحالي باستخدام خيار Meta DB_TABLE. ثم يمكنك فقط تفريغ الطرز التي قمت بنسخها في التطبيق الجديد. لن تتأثر التطبيق الحالي.

لقد قمت بإنشاء أمر إدارة يقوم بتوليد تركيبات على أساس نماذج لكل نموذج. يمكن إنشاء تركيبات عن طريق تشغيل:

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

رمز في: https://gist.github.com/2394883.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top