2010-11-18 21 views
30
में वस्तुओं को बचाने

मैं Django के ऑनलाइन दस्तावेज़ों में इस विषय पर किसी भी बात नहीं देखा है।प्रश्न Django

मैं डेटाबेस के लिए वस्तुओं की एक सूची को बचाने के लिए कोशिश कर रहा हूँ, लेकिन मैं क्या कर सकते हैं सूची के माध्यम से पाश और() हर वस्तु को बचाने के कहते हैं।

तो Django डेटाबेस में कई बार मारा है? या Django के बजाय बचाने एक बैच क्या करेंगे?

+0

शायद स्वीकार किए गए उत्तर को बदलने के लायक है कि bulk_create() django 1.4 में उपलब्ध है और – DMTintner

उत्तर

10

दुर्भाग्यवश, बैच आवेषण कुछ ऐसा है जो Django 1.3 और पहले सीधे समर्थन नहीं करता है। आप ORM का उपयोग करना चाहते हैं, तो आप को बचाने() कॉल करने के लिए प्रत्येक व्यक्ति वस्तु पर की क्या ज़रूरत है। यदि यह एक बड़ी सूची है और प्रदर्शन एक मुद्दा है, तो आप प्रक्रिया को नाटकीय रूप से गति देने के लिए मैन्युअल रूप से लेनदेन के अंदर आइटम्स को INSERT में django.db.cursor का उपयोग कर सकते हैं। यदि आपके पास एक विशाल डेटासेट है, तो आपको पोस्टग्रेज़ में कॉपी से जैसे डेटाबेस इंजन विशिष्ट विधियों को देखना शुरू करना होगा।

+3

यह अभी भी django 1.5 के साथ सच है? – maazza

+6

नहीं - नीचे दिए गए उत्तर को देखें। 1.4 के रूप में, 'bulk_create() 'कुशल थोक डेटा आवेषण को संभालेगा। (https://docs.djangoproject.com/en/1.5/ref/models/querysets/#bulk-create) –

+1

कॉपी अभी भी बेहतर है तो bulk_create? – sharafjaffri

1

This एक अच्छा प्रारंभिक बिंदु हो सकता है, लेकिन कोड स्निपेट के लेखक कहते हैं, यह उत्पादन तैयार नहीं हो सकता है।

2

यह प्रश्न How do I perform a batch insert in Django? में भी संबोधित किया गया है, जो Django को ऐसा करने के कुछ तरीके प्रदान करता है।

35

Django 1.4 के रूप में, QuerySet ऑब्जेक्ट पर bulk_create() विधि मौजूद है, जो एक क्वेरी में ऑब्जेक्ट्स की सूची डालने की अनुमति देती है। अधिक जानकारी के लिए, देखें:

+0

बहुत अच्छा! मुझे तब 1.4 में अपग्रेड करना चाहिए। – netvope

+0

bulk_create भयानक है लेकिन, दुख की बात यह है कि यह विरासत मॉडल का समर्थन नहीं करता है। इसे संभालने का कोई विचार? –

+0

विशेष रूप से ध्यान दें कि "[यदि मॉडल की प्राथमिक कुंजी एक ऑटोफ़ील्ड है, तो यह प्राथमिक कुंजी विशेषता को पुनर्प्राप्त और सेट नहीं करती है, क्योंकि सेव() करता है, जब तक कि डेटाबेस बैकएंड इसका समर्थन नहीं करता (वर्तमान में PostgreSQL)] (https: // docs। djangoproject.com/en/dev/ref/models/querysets/#bulk-create) "। – Ninjakannon

2

Django 1.4 से मौजूद है bulk_create(), लेकिन, हमेशा लेकिन।

आपको bulk_create() का उपयोग करके सावधान रहना होगा, यह आंतरिक रूप से save() विधि को कॉल नहीं करेगा।

Django डॉक्स के रूप में कहते हैं

मॉडल को बचाने() विधि

नहीं कहा जा जाएगा

इसलिए, यदि आप विधि बचाने अधिभावी कर रहे हैं, (के रूप में मेरे मामले था) आप उपयोग नहीं कर सकते bulk_create।

संबंधित मुद्दे