0

我正在使用 App Engine 构建一个同步引擎,当我从客户端接收数据时,我想存储一个对象,但我不在乎它是否已经存在。如果我在更新时总是从客户端发送所有属性,那么今天效果很好。但我想要...

  • 客户端不知道的一些内部属性在更新后仍然存在
  • 客户端只能发送更改的值
  • 避免在更新之前获取所有对象,因为可能需要更新的对象很少

我是否需要获取每个对象,然后只更新我想要更改的值,然后更新对象?或者是否可以部分更新实体而不获取它们?

4

1 回答 1

2

不,您不能在不先读取对象的情况下更新它。当您用新数据“覆盖”一个对象时,该对象的新版本将包含显式写入的数据。

您可能应该制作一个允许客户端设置的属性列表,并仅使用客户端发送且在白名单中的那些属性值更新对象(在读取之后)。

例如(使用 NDB 语法):

whitelist = ['prop1', 'prop2', ...]

def update_entity(key, **changed_values):
  ent = key.get()
  for name, value in changed_values.items():
    if name in whitelist:
      setattr(ent, name, value)  # Or ent._properties[name]._set_value(ent, value)
  ent.put()
于 2012-08-22T20:28:22.547 回答