我想通过键使用它由数据存储分配的ID加载实体,但我没有看到任何API方法来做到这一点(使用NDB)。我以为我能够从一个整数ID做出一个Key,并使用key.get()来加载实体,但是我没有看到一种方法来从一个id中创建一个键。我怀疑我在这里丢失了一些明显的东西。我应该如何加载一个我只知道它的ID的实体?应用程序引擎ndb - 如何使用ID加载实体的密钥?
8
A
回答
23
YourModel.get_by_id()
通过id获取模型实例。
这里的文档:
https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id
不认为你不能得到通过ID的实体不知道的那种,因为不同型号类的实例可以有相同的ID/KEY_NAME
22
另一个方式:ndb.Key(YourModel, id).get()
。
0
NDB中的模型没有将它们的键类型定义为模型的一部分。这很好,因为你可以有一个给定的模型类型,可以通过多种不同类型的键和父母访问,这使得它们更加灵活。但它有些问题,因为它并不总是清楚关键代表什么或它来自哪里。
在那里有永远只能 一个一种关键的一个给定的模型(这几乎是 每模型),我喜欢的生成密钥,它增添了几分语义清晰创建一个类的方法的情况下所以:
class Book(ndb.Model):
title = ndb.StringProperty()
pages = ndb.IntegerProperty()
@classmethod
def make_key(cls, isbn):
return ndb.Key(cls, isbn)
b = Book.make_key('1234-5678').get()
确定添加的代码是不是绝对必要的,但它增加了透明度,使我的模型更长远的维护。
相关问题
- 1. 如何通过谷歌应用引擎引用实体使用NDB
- 2. JSON编码带密钥的NDB实体
- 3. Google应用引擎ndb:禁止使用相同的ID
- 4. 过滤谷歌应用程序使用NDB引擎
- 5. 谷歌应用程序引擎:实体ID不显示
- 6. Python NDB实体的密钥ID自定义
- 7. 谷歌应用程序引擎不加载的应用程序
- 8. Google应用引擎:使用python查询返回的实体ID
- 9. 应用程序引擎:你将如何...快照实体
- 10. 谷歌应用程序引擎密钥类
- 11. iPhone访问应用引擎密钥
- 12. 如何增加应用程序密钥的使用寿命?
- 13. 谷歌应用程序引擎:如何添加字段到现有的实体
- 14. 从应用引擎数据存储中检索密钥/ ID值?
- 15. 验证Facebook应用程序ID和应用程序密钥
- 16. 在NDB中,密钥的id是binarysafe?
- 17. 谷歌应用程序引擎的上传/下载数据到NDB
- 18. 谷歌应用程序引擎:NDB sort属性
- 19. 如何确保应用程序引擎ndb根实体在继续执行代码之前保存
- 20. 如何使用ID删除NDB实体?基于
- 21. Linq to Entities - 引用实体密钥
- 22. 如何安全地存储应用程序ID /密钥?
- 23. 谷歌应用程序引擎NDB查询错误添加三角洲日期
- 24. 使用ndb模型的谷歌应用引擎全文搜索
- 25. 如何让我的虚拟应用程序使用引擎的模板引擎?
- 26. 在ProtoRPC.Message中使用数据存储实体的ID或密钥
- 27. 如何从实时应用程序引擎应用程序创建local_db.bin
- 28. 从应用程序引擎删除实体
- 29. 应用程序引擎记录到数据库和实体组
- 30. 谷歌应用程序引擎实体没有被创建
谢谢,这正是我一直在寻找的。不知道我在文档中错过了这些。 – user605331 2012-04-05 14:51:49
我认为文档是错误的,我无法得到这个为我的生活工作,但后来我注意到我传递一个str,以便将长ID转换为一个int做的伎俩,虽然文档引导你相信你可以使用str,至少不会在本地开发应用程序服务器应用程序引擎版本1.8.9上保持真实。一旦我做了一个int(id_str)它工作正常。 – Shaun 2014-02-20 16:13:27
@Shaun我不认为文档是错误的。如果你的id是一个int,那么你将不得不传入一个int,如果它是一个str,那么它必须是一个str。 – aschmid00 2014-02-20 22:30:06