python - Google App Engine 模型类是如何存储的?

标签 python google-app-engine google-cloud-datastore

我怀疑对象是如何存储的。假设我定义了一个类:

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/

相关文章:

python - 使用管道和网格搜索执行特征选择

Python取消引用URL但保留超链接

google-app-engine - 在内存缓存中存储值的最大长度是多少秒

go - 从字符串制作 Google App Engine 数据存储区 key

python - 如何组织GAE Modules app结构和代码?

python - 如何在 sqlalchemy.engine.Connection 中设置 autocommit = 1

java - 将服务帐户(json 文件)位置传递给 application.properties

python - 无法使用 REST API、谷歌云存储删除 file_name 中包含空格和西里尔字母的多个对象

google-app-engine - 寻找想法/替代方案以提供匹配 GAE 数据存储查询的页面/项目计数/项目导航

Python 原始套接字 - IP_HDRINCL 选项