Google app engine NDB query fetch()和ContextOptions

Google app engine NDB query fetch()和ContextOptions,google-app-engine,app-engine-ndb,Google App Engine,App Engine Ndb,我只想在一个查询中禁用上下文缓存。我想我可以这样做: MyModel.query(ancestor=user.key).fetch(100, options=ContextOptions(use_cache=False, use_memcache=False)) 或 但它似乎对我不起作用。因此,我的问题是如何使用fetch禁用查询的缓存和memcache 附言: 对于get(),它可以完美地工作: MyModel.query(ancestor=user.key).get(use_cache=F

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

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

但它似乎对我不起作用。因此,我的问题是如何使用fetch禁用查询的缓存和memcache

附言:

对于get(),它可以完美地工作:

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

谢谢

仅get()支持缓存。从:

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

如果您遇到某些实体的问题(这些实体似乎已被缓存),则可能必须更改上下文缓存策略:

ctx.set_cache_policy(lambda key: False)

set_cache_策略的参数必须是取一个参数(键)并返回布尔值(如果必须缓存键)的函数。在这里,它总是返回False,因此不会缓存任何实体。

您应该只能够写入

MyModel.query(........).fetch(limit, use_cache=False)
如果这没有达到预期效果,那么您将看到一些不同的bug。为此,不需要设置全局缓存策略

(的确,在过去的某个时候,fetch()不支持use_cache=…;但这一点早就得到了解决。此外,不必为use_memcache=….费心了;查询过程根本不使用它。)

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