في 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 هو الأمثل لعلاقات الكائن الفردي ذات الأعمدة المتكررة المحدودة. في المقابل، يُفضل استخدام الجلب المسبق في علاقات متعدد إلى متعدد أو علاقات مفاتيح خارجية عكسية متفرقة لتقليل اتصال قاعدة البيانات. ومع ذلك، قد يؤدي ذلك إلى كائنات مكررة في تمثيل بايثون للبيانات. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3