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 に答える