10

True次の(壊れた)関数については、エンティティが作成または更新された場合、またはそれ以外の場合に戻りたいと思いFalseます。get_or_insert()問題は、既存のエンティティを取得したのか、それとも挿入したのかがわからないことです。これを判断する簡単な方法はありますか?

class MyModel(ndb.Model):
    def create_or_update(key, data):
        """Returns True if entity was created or updated, False otherwise."""

        current = MyModel.get_or_insert(key, data=data)

        if(current.data != data)
            current.data = data
            return True

        return False
4

1 に答える 1

30

get_or_insert()は些細な関数です(ただし、通常とは異なるプロパティ名を処理しようとするため、実装は複雑に見えます)。あなたはそれを自分で簡単に書くことができます:

@ndb.transactional
def my_get_or_insert(cls, id, **kwds):
  key = ndb.Key(cls, id)
  ent = key.get()
  if ent is not None:
    return (ent, False)  # False meaning "not created"
  ent = cls(**kwds)
  ent.key = key
  ent.put()
  return (ent, True)  # True meaning "created"
于 2013-01-27T16:34:43.503 に答える