django queryset - 在O(1)中命中数据库

时间:2013-08-20 14:28:25

标签: python database django complexity-theory django-queryset

我的Django应用程序中有以下行:

last_job_instance = (JobInstance.objects.filter(job_type = job_type).filter(agent = agent).order_by('-execution_end_date'))[0]

我想让它在O(1)时间内运行 - 换句话说 - 我想根据日期将数据库中的最后一个作业实例拉出来。

我的问题是上面的查询集命中了数据库一次,或者先获取所有的作业实例对象,按日期排序,然后才得到第一个(即O(nlogn))。

非常感谢!

Tidhar

1 个答案:

答案 0 :(得分:0)

在您的查询集上使用latest("execution_end_date")

lji = JobInstance.objects.filter(job_type=job_type, agent=agent).latest('execution_end_date')

或者将其添加到模型的Meta类中,如下所示:

class JobInstance(models.Model):

    ....

    class Meta:
        get_latest_by = "execution_end_date"