1

只是想知道我是否弄错了:

get()操作使用 NDB 缓存,所以这个(章节是 ndb.Model 类):

# Get the entity
chapter_key = ndb.Key('Book', long(bookId), 'Chapter', long(chapterId))
chapter = chapter_key.get()

如果是实体的第二次或更多次读取,则可以使用 ndb 缓存。

但如果我做这个?

Chapter.get_by_id(long(id), parent=ndb.Key('Book', long(bookId)))

这也是由 ndb 管理的,还是这个操作是标准的 db 操作并且不使用缓存?

4

2 回答 2

6

Model.get_by_id将以完全相同的方式使用 context-cache 和 memcacheKey.get

于 2013-05-30T17:17:13.650 回答
1

由于 Greg 的回答是正确的,我只想提一下,您可以使用urlsafe字符串,并在函数之间传递它,而不是手动将键放在一起。

假设你有一把钥匙:

page_key = ndb.Key('Book', long(bookId), 'Chapter', long(chapterId), 'Page', long(pageId))

从中创建 urlsafe:

page_url_string = page_key.urlsafe()

要检索模型,只需使用:

page = ndb.Key(urlsafe=page_url_string).get()

如果您使用具有多个父级的模型,请考虑一下,不需要手动输入键,代码会很快变得混乱,因为您需要在函数之间传递额外的变量。

于 2017-09-01T12:50:20.727 回答