仅更新 Google Cloud Datastore 中实体的某些字段时出现问题

Problem with updating only some fields of entities in Google Cloud Datastore

我使用 Python 在 Google Cloud Datastore 中创建了一个实体:

client = datastore.Client()

key = client.key('EntityType', id)
entity = datastore.Entity(key=key)
entity.update({'id': id, 'property_0': value_0, 'property_1': value_1,})

在此之后,当我检查我的实体列表时,我有一个具有 3 个属性 idproperty_0property_1

的新实体

在另一个函数中,我只更新了 property_2,我是这样做的

key = client.key('EntityType', id)
entity = datastore.Entity(key=key)
entity.update({'property_1': new_value_1,})

此后检查实体列表时,我只看到 property_2 个具有新值的实体。

如何只更新实体的 property_1 而同时保留其他实体?

您需要先获取它

key = client.key('EntityType', id)
entity = client.get(key)
entity.update({'property_2': new_value_2,})

如果您只想更新实体的某些属性,则不应使用 .update() 方法,此方法会删除您未分配任何值的属性。相反,您可以手动设置要更改的 属性 的值,如下例所示:

# We first create the entity with the properties we want by using the update method.
client = datastore.Client()
key = client.key('EntityType', id)
entity = datastore.Entity(key=key)
entity.update({'property_0': 'a_string_value', 'property_1': 123})
client.put(entity)

# Then later we just fetch that entity and change the property we want.
client = datastore.Client()
key = client.key('EntityType', id)
entity = datastore.Entity(key=key)
entity['property_0'] = 'a_different_string_value'
client.put(entity)