如何通过Django ORM使用条目计数器从sqlite db获取最新的唯一条目

时间:2016-10-19 09:42:32

标签: python django sqlite django-orm

我有一个SQLite数据库,如下所示:

|ID|DateTime|Lang|Details|
|1 |16 Oct  | GB |  GB1  |
|2 |15 Oct  | GB |  GB2  |
|3 |17 Oct  | ES |  ES1  |
|4 |13 Oct  | ES |  ES2  |
|5 |15 Oct  | ES |  ES3  |
|6 |10 Oct  | CH |  CH1  |

我需要一个Django查询来选择它:

|1 |16 Oct  | GB | GB1   | 2 |
|3 |17 Oct  | ES | ES1   | 3 |
|6 |10 Oct  | CH | CH1   | 1 |

因此,这是唯一(由Lang)最新(由DateTime)条目和出现次数(由Lang)。是否可以使用单个SQL或Django-ORM查询执行此操作?

2 个答案:

答案 0 :(得分:0)

您可以同时使用Django annotate()和value():link

  

当使用values()子句约束结果集中返回的列时,评估注释的方法略有不同。原始结果不是为原始QuerySet中的每个结果返回带注释的结果,而是根据values()子句中指定的字段的唯一组合进行分组。然后为每个唯一组提供注释;注释是在该组的所有成员上计算的。

您的ORM查询应如下所示:

queryset = Model.objects.values("Lang").annotate(
    max_datetime=Max("DateTime"),
    count=Count("ID")
).values(
    "ID", "max_datetime", "Lang", "Details", "count"
)

答案 1 :(得分:0)

正如你想要" Lang" " DateTime"的最新条目,以下查询将帮助您,

queryset = Model.objects.distinct(" Lang")。order_by(" -DateTime")