如何在ndb模型中迁移新添加的python class 属性?
How to migrate newly added python class property in ndb model?
我目前在 NDB 中有一个模型,我想向其中添加一个新的 属性。假设我有以下内容:
class User(Model, BaseModel):
name = ndb.StringProperty(required=False)
email = ndb.StringProperty(required=False)
@property
def user_roles(self):
return UserRole.query(ancestor=self.key).fetch()
@property
def roles(self):
return [user_role.role for user_role in UserRole.query(ancestor=self.key).fetch()]
现在,比方说,我又添加了一个名为 market_id
的 property
。例如,
class User(Model, BaseModel):
name = ndb.StringProperty(required=False)
email = ndb.StringProperty(required=False)
@property
def user_roles(self):
return UserRole.query(ancestor=self.key).fetch()
@property
def roles(self):
return [user_role.role for user_role in UserRole.query(ancestor=self.key).fetch()]
@property
def market_id(self):
""" fetches `id` for the resource `market` associated with `user` """
for each_role in UserRole.query(ancestor=self.key):
resource = each_role.role.get().resource
if resource.kind() == 'Market':
return resource.id()
return None
这里的问题是,roles
已按预期正确获取所有现有实体(因为 属性 从一开始就存在,而且可以在数据存储中观察到一个额外的列称为 roles
).
由于我正在处理 Python class 属性,因此我认为不需要迁移。但是,名为 roles
的列怎么已经存在了?为什么新添加的 属性 不叫 market_id
?是否需要迁移?
您建议的更改不是实际的 ndb
模型更改,因为您没有 adding/deleting/modifying 模型的任何数据存储属性。只有 ndb.Property
class children 是 真实的 ndb
实体在 put() 到数据存储区时存储的模型属性。
您要添加的 属性 是 Python class @属性 - 与数据存储中的内容无关。
因此对于这种特殊情况,不需要迁移。
我相信问题的更新使这一点更加清楚。 market_id
@属性 不是 User
数据存储实体 属性。要获取它的值,您不需要更新 User
实体,但您必须 create/edit 相应的 UserRole
实体及其 resource
属性 指向一个 Market
实体。
我目前在 NDB 中有一个模型,我想向其中添加一个新的 属性。假设我有以下内容:
class User(Model, BaseModel):
name = ndb.StringProperty(required=False)
email = ndb.StringProperty(required=False)
@property
def user_roles(self):
return UserRole.query(ancestor=self.key).fetch()
@property
def roles(self):
return [user_role.role for user_role in UserRole.query(ancestor=self.key).fetch()]
现在,比方说,我又添加了一个名为 market_id
的 property
。例如,
class User(Model, BaseModel):
name = ndb.StringProperty(required=False)
email = ndb.StringProperty(required=False)
@property
def user_roles(self):
return UserRole.query(ancestor=self.key).fetch()
@property
def roles(self):
return [user_role.role for user_role in UserRole.query(ancestor=self.key).fetch()]
@property
def market_id(self):
""" fetches `id` for the resource `market` associated with `user` """
for each_role in UserRole.query(ancestor=self.key):
resource = each_role.role.get().resource
if resource.kind() == 'Market':
return resource.id()
return None
这里的问题是,roles
已按预期正确获取所有现有实体(因为 属性 从一开始就存在,而且可以在数据存储中观察到一个额外的列称为 roles
).
由于我正在处理 Python class 属性,因此我认为不需要迁移。但是,名为 roles
的列怎么已经存在了?为什么新添加的 属性 不叫 market_id
?是否需要迁移?
您建议的更改不是实际的 ndb
模型更改,因为您没有 adding/deleting/modifying 模型的任何数据存储属性。只有 ndb.Property
class children 是 真实的 ndb
实体在 put() 到数据存储区时存储的模型属性。
您要添加的 属性 是 Python class @属性 - 与数据存储中的内容无关。
因此对于这种特殊情况,不需要迁移。
我相信问题的更新使这一点更加清楚。 market_id
@属性 不是 User
数据存储实体 属性。要获取它的值,您不需要更新 User
实体,但您必须 create/edit 相应的 UserRole
实体及其 resource
属性 指向一个 Market
实体。