Удалить свойство из существующего экземпляра модели - PullRequest
9 голосов
/ 06 января 2010

У меня есть модель с большим свойством BLOB-объекта User.image Наличие этого свойства в моей модели заставило мои запросы занимать слишком много времени и выходить за крайний срок, поэтому я решил переместить это свойство в другую модель - UserData - чьим родителем является Пользователь.

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

Есть ли способ удалить эти данные из пользовательских экземпляров?

Ответы [ 2 ]

12 голосов
/ 06 января 2010

Ответ на ваш вопрос задокументирован здесь: https://developers.google.com/appengine/articles/update_schema

Копирование / вставка из раздела «Удаление удаленных свойств из хранилища данных»:

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

  1. Убедитесь, что вы удалили свойства из определения модели.
  2. Если ваш класс модели наследуется от db.Model, временно переключите его наследовать от db.Expando. (db.Model экземпляры не могут быть изменены динамически, что нам нужно сделать на следующем шаге.)
  3. Цикл по существующим объектам (как описано выше). Для каждого сущность, используйте delattr для удаления устаревшее свойство, а затем сохранить юридическое лицо.
  4. Если ваша модель изначально унаследована от db.Model, не забудьте чтобы изменить его после обновления всех данные.
0 голосов
/ 06 января 2010

У меня нет возможности проверить это прямо сейчас, но я бы попробовал установить для свойства изображения значение null или None (не уверен, используете ли вы Java или Python) при переходе к использованию класса UserData. Вы можете просто сделать это встроенным в свой код как способ устаревания свойства, или вы можете настроить работу cron, которая делает это все сразу. Я не уверен, есть ли лучший способ полностью удалить свойство изображения из сущности, но это по крайней мере решило бы вашу проблему времени загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...