Google app engine google应用程序引擎:如何向现有实体添加字段

Google app engine google应用程序引擎:如何向现有实体添加字段,google-app-engine,entity,Google App Engine,Entity,我有一个谷歌应用程序引擎应用程序,我想扩展我的实体定义之一。如何确保现有实体对象正确初始化新字段?下一次我查询现有对象时,它们是否只具有默认值?我想添加StringListProperty 您必须将属性逐个添加到所有现有实体中 您没有提到您正在使用哪种语言或API。程序的具体细节将根据您的情况而有所不同 通常,最安全的方法是使用不验证实体的API加载每个实体。在python中,可以使用Expando模型。在java中,可以使用低级数据存储API。(尝试使用JDO或JPA可能不起作用)您现在需要遍

我有一个谷歌应用程序引擎应用程序,我想扩展我的实体定义之一。如何确保现有实体对象正确初始化新字段?下一次我查询现有对象时,它们是否只具有默认值?我想添加StringListProperty

您必须将属性逐个添加到所有现有实体中

您没有提到您正在使用哪种语言或API。程序的具体细节将根据您的情况而有所不同

通常,最安全的方法是使用不验证实体的API加载每个实体。在python中,可以使用Expando模型。在java中,可以使用低级数据存储API。(尝试使用JDO或JPA可能不起作用)您现在需要遍历所有现有实体。(尝试使用新的API来实现这一点,不需要太多麻烦)。对于每个实体,您将加载它,添加新属性,然后将其放回/保存回数据存储。现在,您可以安全地回到验证实体的框架,如JDO或非expando模型


此方法适用于修改属性类型或删除属性。

如果向模型中添加新属性,现有实体在加载时将具有默认值(如果提供了默认值)。但是,在您获取它们并再次存储它们之前,它们不会出现在该值的查询中。

我可以提供默认值(正如Nick Johnson的回答所示)。您的解决方案是否解决了比这种情况更复杂的问题,例如新属性的值取决于每个实体实例的特定内容?@Joey nick的解决方案更适合您的情况。更改属性类型或删除属性需要更复杂的方法。