【问题标题】:Partly update App Engine entity部分更新 App Engine 实体
【发布时间】:2012-08-22 17:29:04
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    例如(使用 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()
    

    【讨论】:

    • 感谢您的回答和建议!
    猜你喜欢
    • 2014-03-20
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多