【问题标题】:GQL Select (including ID) Filter by IDGQL 选择(包括 ID) 按 ID 过滤
【发布时间】:2013-02-14 00:37:32
【问题描述】:

我正在寻找在 GQL 中可以选择除 ID 之外的属性并按 ID 过滤的示例。

我想要完成的伪代码是这样的:

myResults = db.GQLQuery("select __KEY__, ATTR1, ATTR2 from MyTABLE" 
                            "WHERE __key__ > KEY('MyTable',:LAST_ID)
                            "order by ID DESC LIMIT 100")

我看到了一些获取密钥的示例,但我需要遍历密钥才能获取记录。

有没有办法让我根据 KEY/ID 条件获取记录集合?

提前致谢

【问题讨论】:

    标签: google-app-engine python-2.7 gql gqlquery


    【解决方案1】:

    您使用__key__ 的方式意味着新记录的所有键都大于之前创建的键(事实并非如此)。如果您想按创建时间过滤,您需要为此添加一个字段,在创建记录时设置。

    【讨论】:

    • 不,我的查询结果集合需要唯一的 IDS。 :LAST_ID 可能会产生误导。在这种情况下,我指的是获取先前存储的 id 之后的所有记录
    • 是的,我的解释是正确的,我的答案仍然有效。您不能按 key > X 过滤以获得更新的记录。给定记录的 key 可能大于或小于任何其他记录,与它们的创建时间无关。如果要按创建时间进行过滤,则需要使用不同的属性。
    • 没关系。我可以接受 ID 可能不会随时间递增的事实。只要我没有获得以前获取的 ID,我就很好。这是一个非常基本的 SQL 要求。也许我遗漏了一些东西 - 但我不知道为什么谷歌让它有些复杂。为什么键会包含表名、ID。为什么只有身份证是不够的。以及为什么我不能根据 ID 获取。为什么要将其与其他属性区别对待(除了索引、唯一等事实)。谢谢和问候
    • 您的要求越来越不明确。如果您只想获取项目(包括键)并且只是想确保您没有获取已经检索到的项目,您应该使用查询和游标:developers.google.com/appengine/docs/python/datastore/…
    • 很抱歉给您带来了困惑。是的,我可以按照链接的建议进行操作,但我也需要 ID - 因为它们将用作另一个表或同一个表中的外键(在某些情况下,我需要层次关系)。我不明白我是否可以获得密钥(以及 ID)和属性 - 为什么谷歌不允许我在单个查询中获取它们。我看不出他们应该阻止用户这样做的技术原因。
    猜你喜欢
    • 2015-12-16
    • 2021-04-18
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多