#django #django-models
#django #django-модели
Вопрос:
Просто интересно, кэширует ли Django 2.2 ORM возвращенные наборы запросов в этом коде, или запросы выполняются в БД для каждого вызова? Есть ли способ сообщить Django «повторно использовать» наборы запросов, чтобы урок повлиял на БД.
Я создаю это приложение, которое извлекает несколько значений и объектов по разным причинам, но базовый запрос в каждом случае одинаков.
hrs = Sale.objects.filter(createdate = dte).aggregate(sum=Sum('duration'))['sum'] / 60
stf = Sale.objects.filter(createdate = dte).values_list('idsalestaff', flat=True).distinct().count()
csh = Sale.objects.filter(createdate = dte).aggregate(sum=Sum('cash'))['sum']
crd = Sale.objects.filter(createdate = dte).aggregate(sum=Sum('card'))['sum']
Ответ №1:
Все наборы запросов в Django являются ленивыми, поэтому ни один из них фактически не выполняется, пока вы не получите данные из набора запросов в свое приложение (например, с помощью for
цикла).
Вы можете создать запрос и применить к нему больше запросов ( hrs.filter(createdate=dte)
), но он все еще ленив, поэтому вы еще не попали в базу данных.
Вы можете принудительно выполнить запрос с помощью одного из этих методов.