我正在使用后端用ndb.put_multi(list_of_entities)
编写多个实体。
我遇到的问题是,在那之后,如果我进行查询,那么我将不会获得任何结果。如果我将 sleep 计时器设置为1秒钟,则可以读取我刚刚编写的实体。
所以例如:
class Picture(ndb.Expando):
pass
class Favourite(ndb.Expando):
user_id = ndb.StringProperty(required=True)
pass
#...make lists with Picture and Favourite kinds
entities = favourites
entities[1:1] = pictures
ndb.put_multi(entities)
favourites = Favourite.query().filter(Favourite.user_id == user_id).fetch(99999, keys_only=True)
logging.info(len(favourites)) #returns 0 in dev_appserver why?
首先假设问题与缓存有关。 但:
读取NDB Entities Operations on Multiple Keys or Entities:
阅读NDB Caching
嗯,我在这里迷路了。一切似乎都还好。即使从控制台查询,我也得到正确的总和,但是无论使用什么功能,都永远不会使用同一处理程序。
我唯一注意到的是,当等待
time.sleep(1)
时,我得到了正确的结果。因此,这与ndb.put_multi
可能无法同步完成或无法同步完成这一事实有关。如此迷茫.... 最佳答案
早上清醒的头脑总是比晚上昏昏欲睡的头脑更好。
谢谢大家的评论。问题解决了。您以正确的方式引导我,以便回答我的问题:
我使用祖先查询来正确获取结果。值得一提的是
Understanding NDB Writes: Commit, Invalidate Cache, and Apply
这意味着在每个放置之后,应用阶段可能尚未完成。
和:
还有一些关于从Google Academy Retrieving data from the Datastore读取和写入之间一致性的事项
感谢@Paul C不断提供帮助,感谢@dragonx和@sologoub帮助我理解。
关于python - 使用后端NDB的GAE put_multi()实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14205763/