我怎么知道ndb.Model.get_or_insert是创建了一个新实体还是现有实体?

时间:2013-01-26 22:21:44

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

对于以下(损坏)函数,如果实体已创建或更新,我想返回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

1 个答案:

答案 0 :(得分:29)

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"