Python,gae,ndb - 获取所有密钥

时间:2016-03-21 14:35:51

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:4)

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

请注意,当Book模型中有大量实体时 - 加载并同时显示所有实体并不是一个好主意。您将需要某种分页实现(取决于您正在做什么) - 否则您的页面将永远加载,这将为您的用户带来糟糕的体验。

https://cloud.google.com/appengine/docs/python/ndb/queries

了解详情

答案 2 :(得分:1)

如果您只希望获得所有密钥,请使用

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

将返回该实体组中所有键的列表。如果你想获得身份证而不是钥匙,你也可以使用:

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