Вопрос

        votergroup = db.GqlQuery("SELECT * FROM Voter WHERE lastname = :1", 'AGEE')

    for voter in votergroup:
        voter.email = 'testemail@testemail.com'
    db.put(votergroup)

Приведенный выше код не обновляет записи, как показывает в документации AppEngine. Я также попробовал использовать объект запроса безрезультатно. Я знаю, что избирательная группа вытягивает записи, потому что я сделал счет на объекте при отладке, и он показал 10 записей. Фактически, до DB.PUT, я провонул избирателя .email, и кажется, что переменная была установлена. Однако изменения никогда не вернутся к БД.

Кто-нибудь знает, что я мог бы сделать неправильно?

Это было полезно?

Решение

Вам нужно позвонить 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 DataStore для извлечения небольших партий, поскольку они необходимы. Призыв 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 сущностей.

Другие советы

Попробуйте это вместо этого:

votergroup = db.GqlQuery("SELECT * FROM Voter WHERE lastname = :1", 'AGEE')

for voter in votergroup:
    voter.email = 'testemail@testemail.com'
    voter.put()

Я не думаю, что есть способ сделать массовые редактики с приложенным двигателем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top