Middle
როდის ხდება მონაცემთა ბაზებზე მოთხოვნები queryset-ის გამოყენებისას?
sobes.tech AI
პასუხი AI-სგან
QuerySet-თან მონაცემთა ბაზის მოთხოვნები რამდენიმე ძირითადი მომენტში ხორციელდება, არა უშუალოდ QuerySet-ის შექმნის დროს. ეს დაკავშირებულია QuerySet-ის "სასურველ" ბუნებასთან.
მთავარი სცენარები მოთხოვნების შესრულებისთვის:
- QuerySet-ის მარშრუტი: როდესაც გადიხართ QuerySet-ის ელემენტებს
forციკლში ან იყენებთ ფუნქციებს, როგორიცააlist(),tuple(),set(). - სლაისინგი: როდესაც იყენებთ კვეცებს (
queryset[start:end]) კვალდაკვალ (queryset[start:end:step]) გარეშე ნაბიჯით. მოთხოვნა შესრულდება მოთხოვნილი ობიექტების დიაპაზონის მისაღებად. ნეგატიური ნაბიჯებით ან განსხვავებული ნაბიჯით კვეცები გამოიწვევს მთლიანი QuerySet-ის მოთხოვნას, შემდეგ Python-ში დამუშავებას. - სერილიზაცია/სტრინგად გადაყვანა: როდესაც იძახით
str(queryset)ანrepr(queryset). - სინამდვილესობის შეფასება: როდესაც QuerySet გამოიყენება პირობით ოპერატორში (
if queryset:). მოთხოვნა შესრულდება მინიმუმ ერთ ჩანაწერის არსებობის შემოწმებისთვის. - აგრეგატული ფუნქციების გამოყენება: როდესაც იძახით
count(),sum(),avg(),max(),min()და სხვა აგრეგატული ფუნქციები. - მეთოდების გამოძახება, რომლებიც აბრუნებენ ერთ ობიექტს: როგორიცაა
get(),first(),latest(). - ბულიან ტიპზე გარდაქმნა: მაგალითად,
if not queryset:.
მაგალითები:
# მონაცემთა ბაზას მოთხოვნა არ ხდება
queryset = MyModel.objects.filter(status='active')
# მონაცემთა ბაზაში მოთხოვნა ხდება ყველა ობიექტის მისაღებად
for obj in queryset:
print(obj.name)
# პირველი 10 ობიექტის მისაღებად მოთხოვნა
first_ten = queryset[:10]
# ობიექტების რაოდენობის გამოთვლა
count = queryset.count()
# პირველი ობიექტის მიღება
first_obj = queryset.first()
# ობიექტების არსებობის შემოწმება
if queryset:
print("ობიექტები მოიძებნა")
მნიშვნელოვანია, რომ Django კეშავს QuerySet-ის შედეგებს პირველი მოთხოვნის შემდეგ. შემდეგი ოპერაციები იგივე QuerySet-ზე (რომელიც უკვე შეფასებულია) გამოიყენებს კეშირებულ მონაცემებს და არ შეასრულებს ახალი მოთხოვნებს მონაცემთა ბაზაზე. თუმცა, თუ შეცვლით QuerySet-ს (მაგალითად, დაამატებთ ახალ ფილტრს), ეს შექმნის ახალ QuerySet-ს, რომელიც ჯერ არ არის შეფასებული, და შემდეგ ოპერაციაზე, რომელიც მონაცემთა წვდომას მოითხოვს, შესრულდება ახალი მოთხოვნა.