Как правильно удалить свойства ndb
В моем приложении мне нужно удалить несколько свойств моих моделей.
я проверил эту ссылку, но первая проблема заключается в том, что свойства находятся на polymodel
и нет никакого способа, которым я собираюсь переключиться на expando
на время, чтобы удалить свойства, я даже не уверен, что может произойти, если я изменю polymodel
для expando
,
так как мне удалить свойства из существующих объектов?
я думал, чтобы установить все StringProperty
в None
а затем удалите их из схемы модели и повторно разверните. одно из этих свойств BooleanProperty
Я не могу установить этот None
право?! или ndb.PickleProperty
... как мне это убрать?
Кто-нибудь знает, как сделать это правильно?
1 ответ
Если вы хотите обновить все ваши сущности, рекомендуемый подход - это задание карты / сокращения, которое читает и перезаписывает все сущности; однако, это может не стоить того, в зависимости от того, сколько у вас данных - карта / уменьшение тоже не бесплатна.
Также убедитесь, что вы тестируете карту / сокращаете работу на небольшом подмножестве данных. Удивительно тонко действительно удалить свойство из сущности, даже если его больше нет в классе модели! Лучший подход может быть:
if 'propname' in ent._properties:
del ent._properties['propname']
ent.put()