我怀疑对象是如何存储的。假设我定义了一个类:
class SomeEntity(db.Model):
some_number = db.IntegerProperty(required=True)
def calculate_something(self):
return self.some_number * 2
我的猜测是,数据存储中唯一存储的是 some_number
的名称/值/类型以及类的完全限定名称 (SomeEntity
) .但是,我没有偶然发现任何证实这一点的信息。
1) 谁能证实这一点?
我想确认我可以在不影响数据存储的情况下更改(和添加/删除)方法。
2) 此外,如果我向类添加新属性(如果该属性具有 required=true
),现有对象会发生什么情况?
最佳答案
实体以 protobuf 表示形式存储在数据存储中(包括其键 - 其中包括您的 App ID 和实体的种类)。 Life of a Datastore Write文章更多地讨论了实体的表示以及它们如何写入数据存储区。查看本系列的其余文章以获取更多详细信息。
1) 方法与实体存储的数据无关,因此您可以添加/删除/更改这些方法而不影响数据的表示。
2) 数据存储是无模式的(不同于典型的 SQL 数据库)。更改您的 Model
对数据存储中的数据没有任何影响。当您检索现有实体时,如果它缺少 required
字段,则会引发错误。或者,如果您不将其设为必填项并提供默认值,则默认值将用于缺少的字段。
如果您需要将旧模型迁移到新模型,您可能需要考虑使用 appengine-mapreduce库以遍历所有实体并单独迁移每个实体。阅读有关架构迁移的更多信息 here .
关于python - Google App Engine 模型类是如何存储的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4208103/