繁体   English   中英

Django:如何从数据库获取最新价值

[英]Django: How to get latest value from db

因此,我想从数据库中获取值列表的最新结果。

例:

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

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

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

解决方案2如下:

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

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

您可以从QuerySet中获得此结果。 您的ORM查询将是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM