NDB查询fetch()和ContextOptions

时间:2012-10-04 12:24:06

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

我想在我的一个查询中禁用上下文缓存。我以为我可以这样做:

MyModel.query(ancestor=user.key).fetch(100, options=ContextOptions(use_cache=False, use_memcache=False))

MyModel.query(ancestor=user.key).fetch(100, config=ContextOptions(use_cache=False, use_memcache=False))

但它似乎对我不起作用。所以我的问题是如何使用 fetch 禁用查询的缓存和内存缓存?

PS:

对于get(),它完美无缺:

MyModel.query(ancestor=user.key).get(use_cache=False, use_memcache=False)

谢谢!

2 个答案:

答案 0 :(得分:4)

你应该能够写

MyModel.query(........).fetch(limit, use_cache=False)

如果没有达到预期的效果,你会看到一些不同的错误。不需要为此目的设置全局缓存策略。

(确实,在过去的某个时刻,fetch()不支持use_cache = ...;但是这个问题早已得到解决。而且,没有必要打扰use_memcache = ...;它没有被使用通过查询过程。)

答案 1 :(得分:2)

仅支持get()的缓存。来自docs

  

查询不会在任何缓存中查找值。但是,查询结果是   如果缓存策略这样说,则写回到上下文缓存中(但是   永远不要Memcache)。

如果您遇到某些似乎已缓存的实体的问题,您可能需要更改上下文缓存策略:

ctx.set_cache_policy(lambda key: False)

set_cache_policy的参数必须是一个param(key)的函数,如果必须缓存该键则返回boolean。在这里它总是返回False,因此不会缓存任何实体。