Последствия изменения модели в движке приложений Google

SQL Alchemy или Django по умолчанию основаны на реляционной базе данных. Следовательно, для любого изменения модели требуется инструмент миграции, такой как sqlalchemy-migrate или South.

Теперь, переключившись на Google App Engine и используя ndb, что произойдет, если я изменю модель? Теоретически база данных NoSQL, такая как Big-Table, не должна заботиться об изменении схемы, и, следовательно, не требуется никакой миграции.

Однако определение такой модели, как эта, четко указывает схему для проверки.

class ExampleModel(ndb.Model):
    example_name = ndb.StringProperty(required=True)
    example_description = ndb.TextProperty(required=True)
    added_by = ndb.UserProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

Итак, что произойдет, если я добавлю поле? Изменили поле или даже удалили поле?

Мое предположение следующее:

Добавление поля

  • Возможно, в самом простом случае только новые экземпляры модели будут проверяться на соответствие новому полю. При загрузке любых более старых экземпляров поле просто остается пустым. Однако что произойдет, если поле установлено как обязательное?

Удаление поля

  • В этом случае все старые экземпляры будут содержать потерянные данные для удаленного поля. Но они остаются там и впредь будут игнорироваться.

Изменение имени поля

  • Комбинация двух вышеперечисленных; Новое имя будет считаться новым полем, а старое поле будет проигнорировано и потеряно.

Верно ли это предположение?


person Houman    schedule 23.06.2013    source источник


Ответы (1)


Вы можете найти много ответов на свои вопросы в документации:

Google App Engine: обновление схемы вашей модели

Однако что произойдет, если поле установлено как обязательное?

Установка свойства по мере необходимости означает только то, что вы должны установить значение непосредственно в конструкторе, поэтому существующие объекты не затрагиваются.

person Dalmas    schedule 23.06.2013