我正在使用App Engine构建同步引擎,当我从客户端接收数据时,我想存储一个对象,但我不在乎它是否已经存在。如果我总是在更新时从客户端发送所有属性,它今天很好用。但我想......
我是否需要获取每个对象,然后仅更新我想要更改的值,然后更新对象?或者是否可以在不提取实体的情况下部分更新实体?
答案 0 :(得分:2)
不,如果没有先阅读它,就无法更新对象。当您使用新数据“覆盖”对象时,该对象的新版本将仅包含 明确写入的数据。
您应该创建允许客户端设置的属性列表,并使用客户端发送的和白名单中的属性值更新对象(在读取之后)。
E.g。 (使用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()