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

Фактически вы можете получить доступ к результатам, используя интерфейс итератора. Более того, когда указано предложение «ПРЕДЕЛ», тогда «результаты получаются так же, как с помощью метода« fetch() »). (ref: [GqlQuery docs] (http://code.google.com/appengine/docs/python/datastore/gqlqueryclass.html#Introduction)) –

+0

@David, он не использует интерфейс итератора; он напрямую обращается к элементу подозрительного массива. Я не знаю о бит LIMIT = fetch(), но если бы я был им, я бы попробовал то, что я предложил, так как я думаю, что его код выглядит немного подозрительным для меня. Если он попробует, и это не сработает, я принесу щедрость. –

+0

Ваше предложение определенно работает (+1) :). Я предполагаю, что документация означает, что результаты извлекаются одинаково, но не возвращаются (т. Е. Результаты все равно возвращаются как итерабельные). Похоже, что страница, на которую он ссылается в документах, нуждается в обновлении - определенно кажется, что его метод должен работать. Я подозреваю, что 'db.put (logList)' в своем коде просто повторно извлекает сущности, и, таким образом, put просто сохраняет свежую, не измененную копию. –

Смежные вопросы