[英]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.