Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine GAE NDB:添加并自动占用新字段_Google App Engine_App Engine Ndb - Fatal编程技术网

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约定来修改如此大量的数据,因为如果这个方法失败,那么我们可能会冒大量数据的风险。在此之前有什么预防措施吗?也许乙醚是导出数据存储实体的一个选项?