2010-01-06 2 views
9

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

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

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

ответ

12

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

Копирование/вставка из «Удаление Удалено Свойства из Datastore» раздела:

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

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

Что такое Java-эквивалент 'delattr'? – Price

+0

Получил это - это 'Entity.removeProperty' – Price

0

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

Смежные вопросы