Google app engine GAE NDB:添加并自动占用新字段
假设我有这个模型:Google app engine GAE NDB:添加并自动占用新字段,google-app-engine,app-engine-ndb,Google App Engine,App Engine Ndb,假设我有这个模型: class User(ndb.Model): username = ndb.StringProperty(required = True) 一周后,数百个用户实体被创建。现在我想添加另一个字段: class User(ndb.Model): username = ndb.StringProperty(required = True) username_lower = ndb.StringProperty() # username.lower() 我
class User(ndb.Model):
username = ndb.StringProperty(required = True)
一周后,数百个用户实体被创建。现在我想添加另一个字段:
class User(ndb.Model):
username = ndb.StringProperty(required = True)
username_lower = ndb.StringProperty() # username.lower()
我不会要求每个用户输入他们现有用户名的小写版本,那么我如何为每个用户实体占用这些字段呢?您可以制作一个脚本,运行一次,这样做:
for user in User.query():
user.username_lower = username.lower()
user.put()
您可以制作一个脚本,运行一次,这样做:
for user in User.query():
user.username_lower = username.lower()
user.put()
小写用户名实际上是用于计算属性的示例 计算属性ComputedProperty是只读属性,其 值是由 应用程序提供的函数。计算出的值将写入 数据存储,以便可以在数据存储中查询和显示 查看器,但在回读实体时将忽略存储的值 从数据存储;而是通过调用 无论何时请求该值,函数都将执行。例如:
由于您没有早期模型的存储值,因此它不存在并不重要,因为它不会直接使用 小写用户名实际上是用于计算属性的示例 计算属性ComputedProperty是只读属性,其 值是由 应用程序提供的函数。计算出的值将写入 数据存储,以便可以在数据存储中查询和显示 查看器,但在回读实体时将忽略存储的值 从数据存储;而是通过调用 无论何时请求该值,函数都将执行。例如:
由于您没有早期模型的存储值,因此它不存在并不重要,因为它不会直接使用 谢谢你的回答@IanGSY。这似乎是最明显的解决办法。我认为可能会有一个GAE约定来修改如此大量的数据,因为如果这个方法失败,那么我们可能会冒大量数据的风险。在此之前有什么预防措施吗?也许以太是导出数据存储实体的一个选项?谢谢您的回答@IanGSY。这似乎是最明显的解决办法。我认为可能会有一个GAE约定来修改如此大量的数据,因为如果这个方法失败,那么我们可能会冒大量数据的风险。在此之前有什么预防措施吗?也许乙醚是导出数据存储实体的一个选项?