1

我有一种方法可以从一个给定日期的模型中检索所有记录,并使用结果来运行额外的过滤。附加过滤是一个按小时检索记录的循环。

简化示例(示例中的一些伪编码)

qs = Occasion.filter(start_date__gte='2013-05-27 00:00:00', end_date__lte='2013-05-27 23:59:59')

list(qs)

for start_hour, end_hour in method_that_returns_hour_for_date('2013-05-27 00:00:00'):        
    # start_hour = 2013-05-27 00:00:00
    # end_hour = 2013-05-27 01:00:00 and so on...

    #The query below renders a new query
    sub = qs.filter(start_date__lte=start_hour, end_date__gte=end_hour)

在调试工具栏中,我可以看到循环中的每一个小时都会完成一个新的数据库查询。我试图通过在未过滤的查询集和 list() 上执行 len() 来触发要在循环之前执行的 SQL 查询,但这不会阻止在循环时执行其他查询。

我能做些什么来优化这个?

4

0 回答 0