Вам нужно вызвать 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 = 'testemail@testemail.com'
db.put(voters)
Если вы не вызываете fetch()
в запросе, вы все равно можете выполнить итерацию по результатам, и будет сделан RPC хранилища данных для получения небольших пакетов по мере необходимости. Вызов put()
для запроса ничего не делает, но вы все равно можете выполнять действия с каждым объектом внутри цикла.
voters_query = db.GqlQuery("SELECT * FROM Voter WHERE lastname = :1", 'AGEE')
for voter in voters_query:
voter.email = 'testemail@testemail.com'
voter.put()
Обратите внимание, что при этом выполняется один вызов хранилища данных для каждой сущности, плюс один вызов для каждого повторяемого пакета. Гораздо лучше использовать fetch()
, если вы не знаете, сколько предметов будет возвращено.
Вы можете использовать курсоры , чтобы разбивать выборки на более крупные куски. Я верю, хотя я не могу найти никаких доказательств того, что fetch()
имеет ограничение в 1000 сущностей.