У меня есть существующая схема:
class Example (db.Model) :
row_num = db.IntegerProperty(required=True)
updated = db.IntegerProperty()
...
...
Я теперь обновил это к:
class Example (db.Model) :
row_num = db.IntegerProperty(required=True)
updated = db.IntegerProperty(default=0)
...
...
Однако существует более чем 2 миллиона объектов в Хранилище данных, которые не имеют обновления = 0 наборов по умолчанию.
Что самый легкий путь состоит в том, чтобы сделать это? Может это сделанным единственной командой от администраторского терминала?
Вам нужно будет написать сценарий, который итерационно просматривает объекты, захватывая их (до 1000 за раз), обновляя значение их свойств, а затем сохраняя их обратно.
Нет, это не очень эффективно по сравнению со стандартной SQL-базой, делающей то же самое (где вы могли бы просто выдать один UPDATE
), но BigTable (технология, лежащая в основе GAE Datastore) не является реляционной базой данных SQL - это совершенно другая архитектура, предназначенная для разных задач и не оптимизированная для обновления одного поля в миллионах строк одновременно - отсюда и синтаксис GQL без понятия UPDATE
.
Как любезно указал Дэвид в комментариях, Google недавно выпустил Mapper API, который можно использовать для решения этой задачи.