я должен добавить одно новое свойство в существующий класс НБД:Как присвоить значение по умолчанию всем записям хранилища NDB?
class AppList(ndb.Model):
...
ignore = ndb.BooleanProperty(default=False) # new property
Тогда я буду использовать его, как показано ниже:
entries = AppList.query()
entries = entries.filter(AppList.counter > 5)
entries = entries.filter(AppList.ignore == False)
entries = entries.fetch()
Я не могу использовать AppList.ignore != True
поймать рано добавил записи (которые дон 't имеет свойство ignore
), поэтому я должен назначить False
для всех записей в моем объекте AppList
. Каков наиболее эффективный способ сделать это? В настоящее время этот объект содержит около 4 000 записей.
Обновление. Я решил использовать следующий уродливый код (не удалось применить cursors
), он работает как задание cron. Но разве я не обновляю все 100 записей каждый раз?
entities = AppList.query()
# entities = entities.filter(AppList.ignore != False)
entities = entities.fetch(100)
while entities:
for entity in entities:
entity.ignore = False
entity.put()
entities = AppList.query()
# entities = entities.filter(AppList.ignore != False)
entities = entities.fetch(100)
Спасибо. Не могли бы вы прояснить, что делает следующая строка: 'put_queue = [ent for ent in res if not hasattr (ent, 'ignore')]'? Если в записи нет атрибута «игнорировать», то что? –
Ответ отредактирован: ndb.get_multi() нуждается в списке сущностей. строка создает список с внутри только объектов, которые не имеют свойства «игнорировать». он делает то же самое из 4 новых строк. –
Хм. Правильно ли я это понимаю - ваш код на самом деле не присваивает значение по умолчанию 'False' для свойства' ignore'? То есть в одной строке отсутствует 'ent.ignore = False' перед' put_queue.append (ent) '? –