2013-08-20 81 views
0

我有我的Django应用程序下面一行:Django的查询集 - 打在O DB(1)

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

我想这为O(1)运行时间 - 或者换句话说 - 我想根据日期仅从数据库中提取最后一个作业实例。

我的问题是上面的queryset命中数据库一次,或者先获取所有的job instances对象,然后按日期排序,然后让我得到第一个(这是O(nlogn))。

非常感谢!

Tidhar

+0

您可以通过'打印JobInstance自己去查。对象.filter(job_type = job_type).filter(agent = agent).order_by(' - execution_end_date')。query' – karthikr

+4

我很喜欢它,如果我的数据库可以返回有序查询结果O(1):) –

+0

如果您对加快数据库端的访问感兴趣,请查看数据库的聚簇索引。 –

回答

0

使用latest("execution_end_date")您查询集:

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

或将其添加到模型中的元类,像这样:

class JobInstance(models.Model): 

    .... 

    class Meta: 
     get_latest_by = "execution_end_date"