Python、gae、ndb-以一种方式获取所有密钥

Python、gae、ndb-以一种方式获取所有密钥,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我知道如何使用Book.get\u by\u id(key) 其中Book是一个ndb.Model 我怎样才能得到同类的钥匙? 它是否正在使用fetch()() 我不想从给定的实体或某个值获取密钥/ID。只需检索所有可用的密钥,这样我就可以检索它们的尊重实体并将其全部显示给用户 使用all_books=Book.query().fetch()变量all_books现在将拥有Book模型的每个实体 但是请注意,当您在书模型中有很多实体时,一次加载并显示它们并不是一个好主意。您将需要某种分页实现(

我知道如何使用
Book.get\u by\u id(key)
其中
Book
是一个
ndb.Model

我怎样才能得到同类的钥匙? 它是否正在使用
fetch()
()

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

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

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


阅读更多信息,请访问如果您只需要密钥,请在
fetch()
方法中使用
keys\u only
关键字:

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

然后您可以使用
ndb.get\u multi(key)
获取所有实体,这可能比返回查询中的实体(如果实体已经在缓存中)更有效。

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

entity.query().fetch(key\u only=True)

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


map(lambda键:key.id(),entity.query().fetch(key\u only=True))

Book.query()
实际上已经足够了。谢谢你的邀请answer@PyGAE实际上,
Book.query()
是一个查询。当你迭代它时,它的行为就像一个列表。根据我的经验,我不建议使用“全部获取”的方法,除非您可以控制某种类型中实体的数量