如何干净地删除ndb属性

时间:2012-10-02 16:40:50

标签: python google-app-engine app-engine-ndb polymodel

在我的应用程序中,我需要删除一些我的模型属性 我检查了this link,但第一个问题是属性位于polymodel,并且我无法在删除属性的情况下切换到expando,我不知道如果我将polymodel更改为expando,则会发生什么情况。

那么如何从现有实体中删除属性?

我想将所有StringProperty设置为None,然后从模型架构中删除它们并重新部署。 其中一个属性是BooleanProperty,我无法将此设置为None对吗?! 或ndb.PickleProperty ...我该如何删除?

有人知道如何正确完成这项工作吗?

1 个答案:

答案 0 :(得分:33)

如果要更新所有实体,建议的方法是读取和重写所有实体的map / reduce作业;但是它可能不值得,取决于你有多少数据 - 地图/减少也不是免费的。

还要确保在一小部分数据上测试map / reduce作业。真正从实体中删除属性是非常微妙的,即使它不再在模型类中!最好的方法可能是:

if 'propname' in ent._properties:
  del ent._properties['propname']
  ent.put()