我正在使用后端用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/

10-12 18:39