我有一個表單提交POST數據處理程序,創建並放置一個名爲項目的數據存儲條目。然後,它重定向頁面,並且其中數據存儲條目被查詢作爲這樣被髮送GET請求:第一次嘗試GAE查詢空,而不是第二
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的底部,並且我得到相同的錯誤。有沒有更好的方法來查詢?
感謝您對異步操作的建議。考慮在查詢的GET請求中嘗試一個while循環,直到數據存儲查詢的長度大於0.只有一個實體被添加,並且這是一個很少會執行的操作。 – TomNash
你不想爲此做一個循環。特別是,您的數據存儲查詢最終一致:https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore。這意味着它可能比查詢請求返回最新信息花費的時間要長得多。如果您需要查詢以返回最新結果,則需要在創建模型時通過使用祖先和指定父項來使其保持一致。 –
@Patrick - get()操作始終強烈一致。當你需要一個實體並且你知道它的關鍵時,不需要祖先查詢。 –