ویدیو توضیح querysetهای تنبل در جنگو

امیرحسین بیگدلو April 2023

تمامی querysetها در جنگو تنبل هستند یعنی تا زمانی که مجبور(evaluate) نباشند به دیتابیس متصل نشده و اطلاعات را نمیگیرند.

این تنبل بودن querysetها باعث مصرف بهینه منابع خواهد شد. شما میتوانید تمام روز را مشغول نوشتن queryset باشید اما queryset ها حتی یکبار هم به دیتابیس وصل نخواهند شد. به مثال زیر دقت کنید:

>> p1 = Person.objects.get(id=2)
>> p2 = Person.objects.filter(name='john')
>> cars = Car.objects.order_by('speed')
>> cars.filter(name='benz')

در هیچکدام از موارد فوق querysetها حتی یکبار هم به دیتابیس وصل نشده‌اند. این querysetها فقط در حافظه موقت برنامه شما قرار دارند و تا زمانی که این querysetها را  evaluate نکنید به دیتابیس متصل نخواهند شد.

برای evaluate کردن querysetها روش ها مختلفی وجود دارد.

iteration: اگر داخل یک queryset حلقه بزنید:

for p in Person.objects.all():
    print(p.name)

slicing: اگر querysetها را به روش list تکه کنید:

Person.objects.all()[:3]

repr(): اگر از متد repr استفاده کنید:

p1 = Person.objects.all()
repr(p1)

len(): اگر از متد len استفاده کنید:

p = Person.objects.all()
len(p)

list(): برای مجبور کردن یک queryset برای evaluate شدن میتوانید از متد list() استفاده کنید:

list(Person.objects.all())

bool(): اگر از شرط ها در کنار queryset استفاده کنید:

if Person.objects.filter(name='admin'):
    print('Hello admin...')

 

ویدیوهای مشابه



ارسال نظر


سیما

2 هفته قبل پاسخ به نظر

ممنونم،خیلی مفید بود برای من

ارسال نظر



مونگارد