只是想知道我是否犯了错误:
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操作,不使用缓存?
答案 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()
如果您使用具有多个父级的模型,请考虑它,不应该需要手动放置键,代码变得非常快,因为您需要在函数之间传递其他变量。