Мне нужно изменить значения для записи, но следующий код не работает.Изменение данных в 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 упоминается в официальных документах.
Фактически вы можете получить доступ к результатам, используя интерфейс итератора. Более того, когда указано предложение «ПРЕДЕЛ», тогда «результаты получаются так же, как с помощью метода« fetch() »). (ref: [GqlQuery docs] (http://code.google.com/appengine/docs/python/datastore/gqlqueryclass.html#Introduction)) –
@David, он не использует интерфейс итератора; он напрямую обращается к элементу подозрительного массива. Я не знаю о бит LIMIT = fetch(), но если бы я был им, я бы попробовал то, что я предложил, так как я думаю, что его код выглядит немного подозрительным для меня. Если он попробует, и это не сработает, я принесу щедрость. –
Ваше предложение определенно работает (+1) :). Я предполагаю, что документация означает, что результаты извлекаются одинаково, но не возвращаются (т. Е. Результаты все равно возвращаются как итерабельные). Похоже, что страница, на которую он ссылается в документах, нуждается в обновлении - определенно кажется, что его метод должен работать. Я подозреваю, что 'db.put (logList)' в своем коде просто повторно извлекает сущности, и, таким образом, put просто сохраняет свежую, не измененную копию. –