"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > متى يتم استخدام تحديد_الرابط الخاص بـ Django ORM مقابل الجلب المسبق؟

متى يتم استخدام تحديد_الرابط الخاص بـ Django ORM مقابل الجلب المسبق؟

تم النشر بتاريخ 2024-11-14
تصفح:104

When to Use Django ORM\'s select_related vs. prefetch_related?

التمييز بين تحديد_الخاص بـ Django ORM والجلب المسبق

في Django ORM، تخدم الأساليب ذات الصلة بالتحديد والجلب المسبق أغراضًا مميزة لإدارة العلاقات في استعلامات قاعدة البيانات.

]select_dependent

تقوم طريقة Django's Select_dependent بجلب بيانات النموذج ذات الصلة أثناء استعلام قاعدة البيانات عن طريق إجراء عمليات ربط SQL. فهو يسترد الحقول المحددة من النماذج ذات الصلة بكفاءة، مما يقلل الحاجة إلى الاستعلامات اللاحقة. يعد هذا الأسلوب مناسبًا بشكل خاص للعلاقات التي تتضمن مفتاحًا خارجيًا أو اتصالات OneToOneField.

prefetch_dependent

على عكس التحديد_المرتبط، لا يؤدي الجلب المسبق إلى عمليات انضمام SQL. وبدلاً من ذلك، يقوم بتنفيذ استعلامات منفصلة لاسترداد النماذج ذات الصلة. ثم يتم "ضم" البيانات في بايثون. هذه الطريقة مفيدة للعلاقات التي تتضمن ManyToManyFields أو اتصالات المفاتيح الخارجية العكسية.

مثال

خذ بعين الاعتبار إعداد النموذج التالي:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)
لجلب مؤلف مع كتبه ذات الصلة باستخدام تحديد_ذات الصلة:

author = Author.objects.select_related('book_set').get(pk=1)
for book in author.book_set.all():
    print(book.title)
لجلب مؤلف مع كتبه ذات الصلة باستخدام الجلب المسبق:

authors = Author.objects.prefetch_related('book_set').all()
for author in authors:
    for book in author.book_set.all():
        print(book.title)
بينما تقوم كلا الطريقتين باسترداد البيانات ذات الصلة، فإن Select_dependent هو الأمثل لعلاقات الكائن الفردي ذات الأعمدة المتكررة المحدودة. في المقابل، يُفضل استخدام الجلب المسبق في علاقات متعدد إلى متعدد أو علاقات مفاتيح خارجية عكسية متفرقة لتقليل اتصال قاعدة البيانات. ومع ذلك، قد يؤدي ذلك إلى كائنات مكررة في تمثيل بايثون للبيانات.

بيان الافراج أعيد طبع هذه المقالة على: 1729672608 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3