我正在尝试使用数据存储分配的 id 按键加载实体,但我没有看到任何 api 方法来执行此操作(使用 NDB)。我以为我可以从一个整数 id 生成一个 Key 并使用 key.get() 来加载实体,但我没有看到一种仅从一个 id 生成密钥的方法。我怀疑我在这里遗漏了一些明显的东西。我应该如何加载一个我只知道它的 id 的实体?
问问题
12700 次
4 回答
29
另一种方式:ndb.Key(YourModel, id).get()
.
于 2012-04-06T05:12:54.760 回答
28
YourModel.get_by_id()
通过 id 获取模型实例。
这里的文档:
https ://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id
不要认为你不能在不知道类型的情况下通过 id 获取实体,因为不同 Model 类的实例可以具有相同的 id/key_name
于 2012-04-05T13:13:09.603 回答
2
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()
当然,添加的代码并不是绝对必要的,但它增加了清晰度并使我的模型更易于长期维护。
于 2015-05-28T19:51:29.843 回答
0
您可以将 id 解析为键字符串:
key = ndb.Key(YourModel, id).urlsafe().
接着:
result = YourModel.query(YourModel.key== key).get().
于 2019-04-26T06:10:33.413 回答