【问题标题】:Obtain the last value from every sensor on my django model从我的 django 模型上的每个传感器获取最后一个值
【发布时间】:2023-04-08 11:38:01
【问题描述】:

我正在使用 Django,我对如何从模型(表)中提取信息有点迷茫。

我有一张表格,其中包含来自各种传感器的不同信息。我想知道的是是否有可能从Django模型中获取每个传感器(每个传感器都有一个标识符)的最后一行数据(使用时间戳列)。

在 sql 中它会是这样的,(可能查询不正确,但我想你可以理解我在尝试什么)

SELECT sensorID,timestamp,sensorField1,sensorField2 
FROM sensorTable 
GROUP BY sensorID 
ORDER BY max(timestamp);

我已经看到 group_by() 函数和 lastest() 存在,但我没有得到任何连贯的东西,我也不清楚我是否选择了最佳形式。

谁能帮我开始这个话题?我想这很容易,但这是一个新世界,很难开始。

您好!

【问题讨论】:

  • 你使用什么数据库?
  • 对不起,我正在使用 postgresql

标签: django django-models


【解决方案1】:

当您使用 PostgreSQL 数据库时,您可以使用查询集的 .distinct(..) method [Django-doc],您可以在其中添加字段,以确定这些应该是不同的。

因此,您可以通过以下方式获取 Django 中最新的传感器:

SensorModel.objects.order_by(<b>'sensor', '-timestamp'</b>).distinct(<b>'sensor'</b>)

因此,我们按sensor 排序(.distinct(..) 需要),然后在 tie 的情况下(因此两次相同的传感器),我们在时间戳上排序降序排列,因此我们为该传感器选择最新的 SensorModel 对象。

【讨论】:

  • 您好!一个问题,通过这段代码,我获得了每个传感器的最后一个值。但是有可能获得例如每个传感器的最后 3 个值吗?我尝试添加SensorModel.objects.order_by('sensor', '-timestamp').distinct('sensor')[:3],但它是错误的。很抱歉打扰您。
  • @Lleims:不,这将为您提供前三个传感器的最新传感器信息。我认为这没有简单的技巧。可能 Django 目前没有表达式,所以您可能需要使用 RawSQL
猜你喜欢
  • 2022-09-23
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多