【问题标题】:Django - QuerySet checksumDjango - 查询集校验和
【发布时间】:2012-07-26 08:35:39
【问题描述】:

我有一个类似的查询集

ses = Session.objects.all()

我想从中获取校验和(以检查是否有更改)。
更改我的意思是创建/删除/更新的行。

我想象的:

from django.core import serializers
new_chksum = serializers.serialize("json", ses).__hash__()

这是了解查询集是否发生变化的好方法吗?

【问题讨论】:

  • OP 正在询问行明智的检查。我正在寻找一个完整的查询集检查(可能创建/删除/更改的行)
  • 如果你使用了一个dirty_bit字段,你可以很容易地通过过滤来查看查询集是否发生了变化:QS.objects.filter(dirty_bit=True)。它不仅会告诉你 QS 是否发生了变化,还会告诉你哪些行也发生了变化
  • 它不会告诉我是否有删除的行,创建的不会脏,不是吗?

标签: python django django-queryset checksum


【解决方案1】:

所以这个问题可能非常复杂 --- 如果您只想知道特定表中的任何行是否被触及(例如:从我上次检查以来是否有任何会话更改)。例如,您可以在另一个表中存储一些版本 ID,每次更改 Session 模型的实例时,该值都会增加。

要进行增量,您可能需要使用数据库触发器和序列。

【讨论】:

  • 我最初的想法是提供一个日历来轮询(使用 ajax)以获取更改并自行更新(如果有)。所以我想我可以给客户端一个哈希值,以便在轮询时比较每个新版本的时间表。
  • 好吧,这可能会杀死您的数据库。因为对于每次轮询,您将执行获取所有日历事件的查询,对其进行序列化,然后对其进行哈希处理。根据结果​​集开销的大小可能会太大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2020-10-26
  • 2017-01-12
  • 2012-04-26
相关资源
最近更新 更多