【问题标题】:Python, gae, ndb - get all keys in a kindPython,gae,ndb - 以一种方式获取所有键
【发布时间】:2016-03-21 14:35:50
【问题描述】:

我知道如何使用 Book.get_by_id(key) 通过一个键获取所有实体 其中Bookndb.Model

如何获得我的 Kind 中的所有密钥? 是用fetch()(https://cloud.google.com/appengine/docs/python/ndb/queryclass#Query_fetch) 吗?

  • 我不想从给定实体或某个值中获取键/ID。只需检索所有可用的密钥,这样我就可以检索他们尊重的实体并将其全部显示给用户

【问题讨论】:

  • 根据我的经验,我不推荐“获取所有”的方法,除非您可以控制一种实体的数量

标签: python google-app-engine google-cloud-datastore app-engine-ndb


【解决方案1】:

如果您只想要密钥,请在fetch() 方法中使用keys_only 关键字:

Book.query().fetch(keys_only=True)

然后您可以使用ndb.get_multi(keys) 获取所有实体。 According to Guido,这可能比在查询中返回实体更有效(如果实体已经在缓存中)。

【讨论】:

    【解决方案2】:

    使用all_books = Book.query().fetch()all_books 变量现在将包含Book 模型的每个实体。

    请注意,当Book 模型中有很多实体时 - 一次加载并显示它们并不是一个好主意。您将需要某种分页实现(取决于您到底在做什么) - 否则您的页面将永远加载,这会给您的用户带来糟糕的体验。

    阅读更多https://cloud.google.com/appengine/docs/python/ndb/queries

    【讨论】:

    【解决方案3】:

    如果您只想获取所有密钥,请使用

    entity.query().fetch(key_only=True)

    这将返回该实体组中所有键的列表。如果您想获取 ID 而不是密钥,您也可以使用:

    map(lambda key: key.id(), entity.query().fetch(key_only=True))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 2018-02-11
      • 2019-05-20
      相关资源
      最近更新 更多