我有一种方法可以从一个给定日期的模型中检索所有记录,并使用结果来运行额外的过滤。附加过滤是一个按小时检索记录的循环。
简化示例(示例中的一些伪编码)
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 查询,但这不会阻止在循环时执行其他查询。
我能做些什么来优化这个?