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)
Итак, что произойдет, если я добавлю поле? Изменили поле или даже удалили поле?
Мое предположение следующее:
Добавление поля
- Возможно, в самом простом случае только новые экземпляры модели будут проверяться на соответствие новому полю. При загрузке любых более старых экземпляров поле просто остается пустым. Однако что произойдет, если поле установлено как обязательное?
Удаление поля
- В этом случае все старые экземпляры будут содержать потерянные данные для удаленного поля. Но они остаются там и впредь будут игнорироваться.
Изменение имени поля
- Комбинация двух вышеперечисленных; Новое имя будет считаться новым полем, а старое поле будет проигнорировано и потеряно.
Верно ли это предположение?