2013-08-20 65 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"