Django ORM में, चयन_संबंधित और प्रीफ़ेच_संबंधित तरीके डेटाबेस क्वेरी में संबंधों के प्रबंधन के लिए अलग-अलग उद्देश्यों की पूर्ति करते हैं।
select_संबंधित
Django की चयन_संबंधित विधि SQL जॉइन करके डेटाबेस क्वेरी के दौरान संबंधित मॉडल डेटा प्राप्त करती है। यह संबंधित मॉडलों के चयनित फ़ील्ड को कुशलतापूर्वक पुनः प्राप्त करता है, जिससे बाद के प्रश्नों की आवश्यकता कम हो जाती है। यह दृष्टिकोण विशेष रूप से विदेशी कुंजी या OneToOneField कनेक्शन वाले संबंधों के लिए उपयुक्त है। इसके बजाय, यह संबंधित मॉडलों को पुनः प्राप्त करने के लिए अलग-अलग क्वेरी निष्पादित करता है। फिर डेटा को पायथन में "ज्वाइन" किया जाता है। यह विधि कईToManyFields या रिवर्स विदेशी कुंजी कनेक्शन वाले रिश्तों के लिए फायदेमंद है।
उदाहरण
निम्न मॉडल सेटअप पर विचार करें:
वर्ग लेखक (मॉडल.मॉडल): नाम = मॉडल.CharField(max_length=100) क्लास बुक(मॉडल.मॉडल): लेखक = मॉडल.फॉरेनकी(लेखक)
एक लेखक को उसकी संबंधित पुस्तकों के साथ चयन_संबंधित का उपयोग करके लाने के लिए:class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author)
prefetch_related का उपयोग करके किसी लेखक को उनकी संबंधित पुस्तकों के साथ लाने के लिए:author = Author.objects.select_related('book_set').get(pk=1)
for book in author.book_set.all():
print(book.title)
हालांकि दोनों विधियां संबंधित डेटा पुनर्प्राप्त करती हैं, लेकिन चयन_संबंधित सीमित अनावश्यक कॉलम वाले एकल-ऑब्जेक्ट संबंधों के लिए इष्टतम है। इसके विपरीत, डेटाबेस संचार को कम करने के लिए कई-से-कई संबंधों या विरल रिवर्स विदेशी कुंजी संबंधों के लिए प्रीफ़ेच_संबंधित को प्राथमिकता दी जाती है। हालाँकि, इसके परिणामस्वरूप डेटा के पायथन प्रतिनिधित्व में डुप्लिकेट ऑब्जेक्ट हो सकते हैं। अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3