如何干净地删除ndb属性

asc*_*d00 13 python google-app-engine polymodel app-engine-ndb

在我的应用程序中,我需要删除一些我的模型属性.
我检查了该链接,但第一个问题是,性能上polymodel并没有这样的IM没有要切换到expando的时间,除去性能,即时通讯甚至不舒尔会发生什么,如果我换polymodel一个expando.

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

我正在考虑将所有内容设置StringPropertyNone然后从模型架构中删除它们并重新部署.其中一个属性是a BooleanProperty,我不能把这个设置为None对吗?!或者ndb.PickleProperty...我应该如何删除它?

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

Gui*_*sum 34

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

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

if 'propname' in ent._properties:
  del ent._properties['propname']
  ent.put()
Run Code Online (Sandbox Code Playgroud)

  • 架构更改后的重新输入不会删除属性值.(这是一个旨在最大化应用程序的两个版本之间的互操作性的故意功能.) (6认同)