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