django查询和子查询之间的最快请求

django查询和子查询之间的最快请求,django,orm,Django,Orm,如果我有: class Record(models.Model): start_time = models.Integerfield() Timestamp 在一个视图中,我想迭代开始日期和结束日期之间的天数 这样做是否更快: records = Record.objects.filter( start_time__gte=dt.datetime.timestamp(start_date), start_time__lt=dt.datetime.times

如果我有:

 class Record(models.Model):

     start_time = models.Integerfield()  Timestamp
在一个视图中,我想迭代开始日期和结束日期之间的天数

这样做是否更快:

 records = Record.objects.filter(
     start_time__gte=dt.datetime.timestamp(start_date),
     start_time__lt=dt.datetime.timestamp(end_date)
 )
 for start_day, stop_day in days_between_start_and_end_date:
      records_week = records.filter(
     start_time__gte=dt.datetime.timestamp(start_day),
     start_time__lt=dt.datetime.timestamp(stop_day)
 )
或者直接

 for start_day, stop_day in days_between_start_and_end_date:
      records_week = Record.objects.filter(
     start_time__gte=dt.datetime.timestamp(start_day),
     start_time__lt=dt.datetime.timestamp(stop_day)
 )

事实上,我试过了,看不出有什么不同,但我不明白为什么,因为对我来说,我在第一种情况下做了一个大请求,在第二种情况下做了很多小请求。知道原因吗?

在这两种情况下,您都不会触发要评估的查询集
filter
除了在underline实现中编写sql语句外,什么都不做,因此在这两种情况下都不会访问数据库,您只是编写了程序中的几个sql语句。只有当您开始使用变量时,django才会开始执行queryset计算


Django博士关于。如果每个orm语句都命中数据库,那么它就不是最优的。

记住查询集是惰性的。这两个示例都不执行任何查询。