NDB密钥与get_by_id

时间:2013-05-30 14:47:09

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

只是想知道我是否犯了错误:

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操作,不使用缓存?

2 个答案:

答案 0 :(得分:6)

Model.get_by_id将使用与Key.get完全相同的上下文缓存和内存缓存

答案 1 :(得分: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()

如果您使用具有多个父级的模型,请考虑它,不应该需要手动放置键,代码变得非常快,因为您需要在函数之间传递其他变量。