迁移 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_company
和 set_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" 内部...和您无需进行任何数据迁移
我目前在 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_company
和 set_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" 内部...和您无需进行任何数据迁移