votergroup = db.GqlQuery("SELECT * FROM Voter WHERE lastname = :1", 'AGEE')
for voter in votergroup:
voter.email = '[email protected]'
db.put(votergroup)
Вышеприведенный код, похоже, не обновляет записи, как показано в документации приложения. Я также попытался использовать объект запроса безрезультатно. Я знаю, что голосовая группа тянет записи, потому что я подсчитал объект при отладке и показал 10 записей. Фактически, перед db.put я зациклился на элементе voter.email, и кажется, что переменная была установлена. Тем не менее, изменения никогда не возвращают его в db.
Кто-нибудь знает, что я могу делать неправильно?
Вам нужно вызвать fetch()
в запросе, создаваемом с помощью db.Query()
, чтобы он возвращал список объектов. Затем вы можете вызвать put(list_of_entities)
, чтобы сохранить их все. Это выглядит так:
voters = db.GqlQuery("SELECT * FROM Voter WHERE lastname = :1", 'AGEE').fetch(10)
for voter in voters:
voter.email = '[email protected]'
db.put(voters)
Если вы не вызываете fetch()
в запросе, вы все равно можете перебирать результаты, и RPC хранилища данных будет создан для получения небольших партий по мере необходимости. Вызов put()
в запросе ничего не делает, но вы все равно можете выполнять действия над каждым объектом внутри цикла.
voters_query = db.GqlQuery("SELECT * FROM Voter WHERE lastname = :1", 'AGEE')
for voter in voters_query:
voter.email = '[email protected]'
voter.put()
Обратите внимание, что это одно хранилище данных для каждого объекта, плюс один вызов для каждой партии, которая повторяется. Намного лучше использовать fetch()
, если вы не знаете, сколько элементов будет возвращено.
Вы можете использовать cursors, чтобы разбить на более крупные куски. Я считаю, хотя я не могу найти никаких доказательств, что fetch()
имеет ограничение в 1000 сущностей.
Попробуйте это вместо:
votergroup = db.GqlQuery("SELECT * FROM Voter WHERE lastname = :1", 'AGEE')
for voter in votergroup:
voter.email = '[email protected]'
voter.put()
Я не думаю, что есть способ сделать массовые изменения с помощью механизма приложения.
put()
берет список сущностей и сохраняет их все: code.google.com/appengine/docs/python/datastore/…
fetch()
перед итерацией поresults
.