首次尝试GAE查询为空,而不是第二次

时间:2014-07-17 00:49:23

标签: python html google-app-engine google-cloud-datastore

我有一个表单,它将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的底部,我得到了同样的错误。有更好的查询方式吗?

1 个答案:

答案 0 :(得分:1)

数据存储区操作是异步的。将实体插入数据存储区后,实体在查询中可用最多需要几秒钟的时间。您有两种可能的解决方案:

  1. 将此实体添加到Memcache,然后再将其保存到数据存储区。在后续请求中,首先检查Memcache,然后仅在查询数据存储之后。在大多数情况下,您根本不必查询数据存储区。这种方法可以节省一些阅读费用。

  2. 由于您需要单个实体,因此根本不要使用查询。使用您实体的ID来检索它:

  3. Retrieving Entities from Keys

    最好的解决方案是结合这些方法。