我有一个表单,它将POST数据提交给处理程序,创建并放置一个名为Item的数据存储条目。然后它重定向页面并发送GET请求,其中查询数据存储区条目:
query = Item.query()
userLessons = query.filter(Item.author == thisUser)
itemQuery = userLessons.filter(Item.name == itemName).fetch(1)
desiredItem = itemQuery[0]
呈现的页面导致错误UnboundLocalError: local variable 'desiredItem' referenced before assignment
。如果我只是刷新页面并发送另一个GET请求,那么数据存储条目就会神奇地存在。这怎么可能?我尝试在放置Item后重定向之前将相同的查询添加到POST的底部,我得到了同样的错误。有更好的查询方式吗?
答案 0 :(得分:1)
数据存储区操作是异步的。将实体插入数据存储区后,实体在查询中可用最多需要几秒钟的时间。您有两种可能的解决方案:
将此实体添加到Memcache,然后再将其保存到数据存储区。在后续请求中,首先检查Memcache,然后仅在查询数据存储之后。在大多数情况下,您根本不必查询数据存储区。这种方法可以节省一些阅读费用。
由于您需要单个实体,因此根本不要使用查询。使用您实体的ID来检索它:
最好的解决方案是结合这些方法。