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

时间:2015-04-08 23:34:53

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我目前在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 / setter,但考虑到当前的实现,我希望避免触及底层数据存储区。

2 个答案:

答案 0 :(得分:5)

您可以通过在Property()构造函数中指定 name =“xx”参数来保留基础NDB属性名称,从而更改类级属性名称

所以可以这样做:

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就会在内部实际设置/获取“company” ...而且你不必进行任何数据迁移

答案 1 :(得分:3)

根据我对ndb的理解,属性名称及其每个实体的内容都存储在数据库中。您必须使用新的属性名称(而不使用旧属性)重写每个实体。

由于这不是没有痛苦的,也许你可以为你的getter和setter选择其他名称,如get_companyset_company