当前位置: 首页 > 知识库问答 >
问题:

如何使用Django从数据库中检查索引号?

卓宏达
2023-03-14

我有一个内置在Django的系统可以接收数据。我将数据存储如下:

 id | sensor | message_id | value
----+--------+------------+-------
 1  | A      | 1          | xxx    
 2  | A      | 2          | xxx
 3  | A      | 3          | xxx
 4  | B      | 1          | xxx
 5  | B      | 2          | xxx
 6  | B      | 4          | xxx
 7  | B      | 7          | xxx

我们期望每个传感器的message_id在每个后续消息中增加一个。如您所见,传感器B的message_id为:1、2、4、7。这意味着传感器B丢失了编号为3、5和6的消息。在这种情况下,我们需要调查丢失的消息,特别是如果丢失了很多消息。所以我现在想要一种方法,当它发生的时候,知道这些丢失的消息。

所以我想检查一下在过去的五分钟内是否缺少一条消息。我希望输出如下所示:

传感器B在过去5分钟内缺少3条消息。缺少以下ID:3、5、6

我想到的最简单的方法是查询一个传感器的message_id,然后循环访问它们,检查是否跳过了任何数字。我想到了这样的事情:

five_minutes_ago = datetime.now() - timedelta(minutes=5)
queryset = MessageData.objects.filter(created__gt=five_minutes_ago).filter(sensor='B').order_by('message_id')
last_message_id = None
for md in queryset:
    if last_message_id is None:
        last_message_id = md.message_id
    else:
        if md.message_id != last_message_id + 1:
            missing_messages = md.message_id - last_message_id - 1
            print(f"{missing_messages} messages missing for sensor {md.sensor}")

但由于我有数百个传感器,这似乎不是最好的方法。甚至可以在SQL本身中实现,但我不知道有什么方法可以这样做。

有谁能给我一个如何有效地做到这一点的建议吗?

共有1个答案

巩选
2023-03-14

您可以尝试类似这样的东西,我已经为逻辑添加了上面的注释,如果有任何查询,请随意评论。

five_minutes_ago = datetime.now() - timedelta(minutes=5)
queryset = MessageData.objects.filter(created__gt=five_minutes_ago).filter(sensor='B').order_by('message_id')

# rows that should ideally be there if no message_id was missing, i.e. equal to last message_id
ideal_num_of_rows = queryset.last().message_id

# total number of message_id present
total_num_of_row_present = queryset.count()

# number of missing message_ids 
num_of_missing_message_ids = ideal_num_of_rows - total_num_of_rows_present - 1 
 类似资料:
  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 问题内容: 有没有办法列出所有SQL Server CE数据库表索引,或者至少列出单个表? 问题答案: -检索有关数据库中包含的索引的信息。选择*从INFORMATION_SCHEMA.INDEXES -检索数据库中的所有表,包括系统表。选择*从INFORMATION_SCHEMA.TABLES Arjuna Chiththananda-检索SQL CE数据库的架构信息

  • 所以我根据YouTube上的教程创建了一个房间数据库。我有两个栏day and likes,每个栏都有int.目前,我已经用三行数据手动填充了数据库。 下面是手动填充数据库的代码: 在我的Dao类中,我当前有Insert、Update、deleteAll和getall...方法。这里是道: } 现在,我要从Room数据库中检索基于当天的数据。所以我想要第6天的likes数,它是1。我想检索数据并将

  • 我正在两个标记之间画一条路线,我想保存那条路线。为此,我将包含lat和lng的ArrayList保存在Firebase数据库中。但我在取回航路点时遇到了问题。我是这样插入的: 在检索数据时,我尝试执行以下操作:

  • 我有一个Spring批处理程序,它从数据库中读取数据并处理它,并将(使用ItemWriter)插入到数据库中的其他表中。在这里,我使用了一系列针对ItemReader、Item处理机和ItemWriter的SQL查询。 我的要求是将所有这些查询存储在一个具有参数和值格式的表中,并通过一个数据库调用来检索它,然后将其传递给ItemReader或Item处理机或ItemrWriter。因此,如果将来查

  • firebase数据库最近的更新似乎有一些变化。我的项目在firebase\u数据库:^7.0.0版本下运行良好,但在firebase数据库的更新版本中,我无法更新项目代码。 以下是v7的工作版本 firebase\u数据库^9.0.12上的同一代码出现错误。我收到的错误在`(DataSnapShot snap)async{…}上错误是 无法将参数类型“Future Function(DataSn