Django

2008-11-27 19 views
9

में बैच ओआरएम संचालन को तेज करने के लिए रणनीतियां मेरी एपीआई कॉलों में से एक के परिणामस्वरूप बड़ी संख्या में ऑब्जेक्ट्स (Django मॉडल) के अपडेट हो सकते हैं। मैं इस के साथ प्रदर्शन के मुद्दों में चल रहा हूँ मैं प्रत्येक आइटम को व्यक्तिगत रूप से अद्यतन करने के बाद से कर रहा हूँ, सहेजने और अगले पर जाने से:Django

for item in Something.objects.filter(x='y'): 
    item.a="something" 
    item.save() 

कभी कभी मेरे फ़िल्टर कसौटी "की तरह है, जहां ('एक' में एक्स, 'लग रहा है बी ',' सी ', ...) "।

ऐसा लगता है कि official answer to this is "won't fix" है। मैं सोच रहा हूं कि इन परिदृश्यों में प्रदर्शन को बेहतर बनाने के लिए लोग किस रणनीति का उपयोग कर रहे हैं।

उत्तर

15

टिकट आप से जुड़ा हुआ थोक निर्माण के लिए है - आप एक अधिरोहित save विधि पर निर्भर नहीं कर रहे हैं या पूर्व/पोस्ट के टुकड़े करने के लिए संकेतों को बचाने बचाने के लिए, QuerySet has an update method जो आप फ़िल्टर पंक्तियों पर एक UPDATE प्रदर्शन करने के लिए उपयोग कर सकते हैं पर काम:

Something.objects.filter(x__in=['a', 'b', 'c']).update(a='something') 
+0

अच्छा, ऐसा दिखता है जैसे मामलों का एक बहुत कवर करेंगे। यह कोशिश करेगा। – Parand

+0

बहुत अच्छा काम किया, बहुत धन्यवाद। – Parand

1

आपको लेन-देन का उपयोग करने या हाथ से एसक्यूएल स्टेटमेंट बनाने की आवश्यकता है। आप स्क्लेक्लेमी का उपयोग करने का भी प्रयास कर सकते हैं जो यूनिट ऑफ वर्क (या एप्लिकेशन लेनदेन) जैसी कुछ महान ओआरएम सुविधाओं का समर्थन करता है।

Django लेनदेन: http://docs.djangoproject.com/en/dev/topics/db/transactions/?from=olddocs

SQLAlchemy: http://www.sqlalchemy.org/