Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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/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
Python 谷歌应用引擎模型类是如何存储的?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 谷歌应用引擎模型类是如何存储的?

Python 谷歌应用引擎模型类是如何存储的?,python,google-app-engine,google-cloud-datastore,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\u number的名称/值/类型以及类的完全限定名(SomeEntity)。然而,我没有

我不知道这些东西是怎么储存的。假设我有一个定义如下的类:

class SomeEntity(db.Model):
    some_number = db.IntegerProperty(required=True)

    def calculate_something(self):
        return self.some_number * 2
我的猜测是,数据存储中存储的唯一内容是
some\u number
的名称/值/类型以及类的完全限定名(
SomeEntity
)。然而,我没有偶然发现任何证实这一点的信息

1) 有人能证实这一点吗

我想确认我可以在不影响存储数据的情况下更改(和添加/删除)方法


2) 此外,如果我向类添加一个新属性(如果该属性具有
required=true
),现有对象会发生什么情况?

实体以protobuf表示形式存储在数据存储中(包括其键,其中包括应用程序ID和实体的种类)。本文将进一步讨论实体的表示以及如何将它们写入数据存储。更多详细信息,请参阅本系列的其余文章

1) 方法与实体中存储的数据无关,因此您可以添加/删除/更改这些方法,而不会影响数据的表示

2) 数据存储是无模式的(与典型的SQL数据库不同)。更改
模型
对数据存储中的数据没有任何影响。检索现有实体时,如果该实体缺少
必填
字段,则会引发错误。或者,如果您没有将其设为必填项并提供默认值,则默认值将用于缺少的字段


如果您需要迁移一个旧的模型到一个新的模型,您可能需要考虑使用该库来遍历所有的实体并单独迁移每个实体。阅读有关架构迁移的更多信息。

它们存储为协议缓冲区。您可以阅读“”文章中的一些详细信息

您可以查看实际存储的内容:

db.model_to_protobuf(your_entity)
添加/删除方法是安全的,只是要小心覆盖方法

如果添加所需的属性,请包含默认值。在重新放置实体之前,不会更新现有实体