对象使用相同的where子句缓存多个查询

时间:2019-04-23 02:33:01

标签: django django-models

只是想知道Django 2.2 ORM是否在此代码中缓存了返回的QuerySet,还是针对每个调用在数据库上执行了查询?有没有一种方法可以告诉Django“重用” QuerySet从而对数据库产生影响。

我正在构建此应用程序,该应用程序会出于不同的原因而检索多个值和对象,但是每种情况下的基础查询都是相同的。

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 个答案:

答案 0 :(得分:0)

所有查询集在 Django 中都是惰性的,因此在您从查询集中将数据获取到应用程序之前,它们实际上都不会执行(例如,使用for循环)

您可以进行查询并对其应用更多查询(hrs.filter(createdate=dte)),但是它仍然很懒,因此您还没有访问数据库。

您可以通过one of these methods强制执行查询。