2010-09-27 46 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