Django:如何从db获取最新值

时间:2016-09-13 23:10:04

标签: python django django-models

所以我想从数据库中获取值列表的最新结果。

示例:

Task
col1 col2
1   1
2   12
3   32
4   1
5   24
1   25
2   62
3   7
2   81
1   9       -> last occurence for '1' in 'col1'
4   10      -> last occurence for '4' in 'col1'
3   121
5   12      -> last occurence for '5' in 'col1'

有一个列表' z'我想用这样的方式编写查询,以便从表格中获得最新结果'任务'这样z就存在于col1中。假设' z'是:

z = [1, 4, 5]

我希望最终结果为:

col1 col2
1   9
4   10
5   12

我想出了两种解决方案。 Solution1如下:

all_results = Task.objects.filter(col1__in=z)
results = dict()
for result in results:
    results[result.col1] = result

Solution2如下:

results = dict()
for x in z:
    results[x] = Task.objects.filter(col1=x).reverse()[0]

但我想知道是否有办法将两种解决方案结合在一起,这样我只需要进行一次数据库调用,并获得每个不同的col1'的结果。 原因:我的数据库非常大,目前我已经实施了Solution2,这使得整个过程非常缓慢。 Solution1不可行,因为有多个条目和'结果'字典会非常大,因此非常耗费时间。

1 个答案:

答案 0 :(得分:0)

您可以在QuerySet中实现此结果。您的ORM查询将是:

Task.objects.filter(col1__in=z).values('col1').annotate(latest_record=Max('col2'))
# where z = [1, 4, 5]