2010-09-27 47 views
1

我需要更改條目的值,但以下代碼不起作用。在GQL中更改數據

logList = db.GqlQuery("SELECT * FROM Log ORDER BY date DESC LIMIT 1") 
logList[0].content = "some text" 
db.put(logList) 

當我運行這個時,最新元素的值不會改變。我檢查與打印輸出,它給出正確的值(什麼內容字段應該改變&正確的舊值),並給出了下面的狀態代碼:

Status: 302 Moved Temporarily 
Content-Type: text/html; charset=utf-8 
Cache-Control: no-cache 
Location: http://localhost:8080/admin/editl 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Content-Length: 0 

什麼是錯我的代碼? The used method of altering data在官方文檔中提及。

回答

2
logList = db.GqlQuery("SELECT * FROM Log ORDER BY date DESC LIMIT 1") 
result = logList.get() 
result.content = "some text" 
result.put() 

試試這個。您將GqlQuery對象混淆爲實際執行查詢的結果。

+0

實際上,您可以使用迭代器接口訪問結果。此外,當指定了「LIMIT」子句時,「結果將與等效的'fetch()'方法一起檢索出來。」 (參考:[GqlQuery文檔](http://code.google.com/appengine/docs/python/datastore/gqlqueryclass.html#Introduction)) – 2010-09-27 19:09:07

+0

@David,他沒有使用迭代器接口;他直接訪問可疑陣列的元素。我不知道LIMIT = fetch()位,但如果我是他,我會嘗試我所建議的,因爲我認爲他的代碼對我來說有點嫌疑。如果他嘗試了,它不起作用,我會提供一個獎勵。 – 2010-09-27 19:14:41

+0

你的建議絕對有效(+1):)。我猜這個文檔意味着以相同的方式檢索結果,但不會以這種方式返回(即結果仍然是可迭代的)。看起來像他在文檔中引用的頁面需要更新 - 這絕對似乎表明他的方法應該工作。我懷疑他的代碼中的'db.put(logList)'只是重新檢索這些實體,因此這只是保存了一個新獲取的,未更改的副本。 – 2010-09-27 19:21:32