Короткий ответ: он не справляется.Вы не можете изменить имя объекта, вы можете изменить свойство, но вам придется обновлять данные вручную.
Ваши определения модели - это просто представление ваших приложений о том, как интерпретировать сохраненные объектыв хранилище данных.Если бы у меня было определение типа:
class MyEntity(db.Model):
text = db.TextProperty()
И какое-то время я запускал мое приложение, заполняя свойство text
моих потребностей, а затем переименовывал столбец в:
class MyEntity(db.Model):
description = db.TextProperty()
Все мои существующие данные останутся такими же, как и были (множество объектов в хранилище данных с заполненными свойствами text
. Только когда я попытался загрузить объекты в экземпляры модели, я увидел бы их только как пустые (без description
).установлен, и нет никакого способа получить доступ к данным text
, которые существуют в настоящее время.) Сохранение (помещение) моего объекта обратно в хранилище данных тогда перезапишет старые данные, и данные будут потеряны.
Если вы сделаететакие изменения в вашей схеме или, скорее, просто изменение типа поля. Вам будет необходимо предварительно обработать данные для обработки изменений. Уровень модели вызовет ошибки, если вы попытаетесь загрузить объект, который небольше соответствует определениям вашей модели.
Для выполнения этой задачи по обновлению ваших данных вручную выбраны следующие виды оружия:
- remote_api / remote_api_shell.py
- Библиотека mapreduce (особенно часть "mapper")
С настройкой remote_api [1]Вы можете открыть интерактивный сеанс Python для ваших живых данных и запускать сценарии локально (в основном), как если бы они выполнялись непосредственно на производственных серверах.Я считаю, что это самый быстрый и простой способ исправить / очистить данные для небольших одноразовых задач.
Mapper api [2] можно использовать, если у вас гораздо большая задача, скажем, изменение миллионов сущностей и необходимостьчтобы использовать как можно больше параллельных возможностей.