0

在查询方面我非常没用,我想知道这个问题的正确结构是什么。

向客户端发送的数据包括对象的密钥,他们使用密钥告诉服务器他们最近下载的对象是什么。

我想从那时起获取所有对象,这些对象具有自动日期属性。

此外,我希望能够将 15 个(左右)最近的对象提供给可能使用特定“新用户”密钥或类似内容请求的新用户。

使用Python2.7运行时,之前没用过GQL,

任何帮助是极大的赞赏。

模型类是这样的:

class Message(db.Model):
    user = db.StringProperty()
    content = db.TextProperty()
    colour = db.StringProperty()
    room = db.StringProperty()
    date = db.DateTimeProperty(auto_now_add=True)
4

1 回答 1

1

如果它是 db.Key 对象或使用 db(相对于 ndb)API 的键的字符串表示:

last_message = Message.get(lastkey)

如果您有其他表示形式的密钥,例如密钥名称:

last_message = Message.get_by_key_name(lastkey)

如果您将密钥作为对象的数字 ID:

last_message = Message.get_by_id(int(lastkey))

然后,您可以获得自上一条消息以来的消息,如下所示:

messages_since_last_message = Message.all().filter('date >', last_message.date).order('date')
#OR GQL:
messages_since_last_message = Message.gql("WHERE date > :1 ORDER BY date ASC", last_message.date)

您可能应该>=只使用比较器,因为可能有多个消息同时到达,然后过滤掉列表中的所有消息,包括您要查找的最后一个键(这实际上取决于您的使用情况以及消息的书写程度)。此外,使用 High Replication 数据存储时,存在最终一致性,因此您的查询不能保证准确反映数据存储,除非您使用祖先查询,在这种情况下,您将实体组限制为每秒约 1 次写入,这同样取决于您的用例可能不是问题。这里的实体组反映了父模型及其所有子祖先。祖先组驻留在单个实体组上。

于 2013-03-14T03:01:27.273 回答