迁移 NDB 模型的正确方法 属性

Proper way to migrate NDB model property

我目前在 NDB 中有一个模型,我想更改 属性 名称而不必触及 NBD。假设我有以下内容:

from google.appengine.ext import ndb

class User(ndb.Model):
  company = ndb.KeyProperty(repeated=True)

我想要的是更像这样的东西:

class User(ndb.Model):
  company_   = ndb.KeyProperty(repeated=True)

@property
def company(self):
   return '42'

@company.setter
def company(self, new_company):
    #set company here

有没有比较轻松的方法呢?我想要使​​用 属性 getter/setters 的便利,但考虑到当前的实现,我想避免接触底层数据存储。

根据我对 ndb 的理解,属性 名称与每个实体的内容一起存储在数据库中。您将不得不使用新的 属性 名称(并且没有旧名称)重写每个实体。

由于这并非没有痛苦,也许您可​​以为您的 getter 和 setter 选择其他名称,例如 get_companyset_company

您可以更改 class 级别 属性 名称,同时通过指定 name="xx"[= 保留基础 NDB 属性 名称20=] 属性() 构造函数中的参数

所以可以做这样的事情:

class User(ndb.Model):
  company_   = ndb.KeyProperty(name="company", repeated=True)

  @property
  def company(self):
    return self.company_

  @company.setter
  def company(self, new_company):
    self.company_ = new_company

所以现在任何时候你访问 .company_ NDB 实际上都会 set/get "company" 内部...和您无需进行任何数据迁移