如何判断ndb.Model.get_or_insert是创建了新实体还是获取了已有实体?

10 投票
1 回答
3886 浏览
提问于 2025-04-17 13:47

对于下面这个(有问题的)函数,我想要在实体被创建或更新时返回 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 个回答

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"

撰写回答