get_or_insert,如何知道它的创建或检索?

Nya*_*baa 2 google-app-engine google-cloud-datastore

我想使用get_or_insert,但我怎么知道它刚刚从现有条目创建或获取.

Nic*_*son 7

简而言之,你做不到.get_or_insert这只是一个便利功能,你可以很容易地为自己编写和改进.这是一个返回元组的简单替换,指示它是否已创建:

@classmethod
def my_get_or_insert(cls, key_name, parent=None, **kwargs):
  def _tx():
    entity = cls.get_by_key_name(key_name, parent=parent)
    if entity:
      return entity, False
    entity = cls(key_name=key_name, parent=parent, **kwargs)
    entity.put()
    return entity, True
  return db.run_in_transaction(_tx)
Run Code Online (Sandbox Code Playgroud)

以下是你如何使用它:

entity, created = MyKind.my_get_or_insert('foo', bar=123)
if created:
  # Do whatever you do with a new entity here.
Run Code Online (Sandbox Code Playgroud)

记住只是承受,如果你用的配方使用它上面,任何你基于实体是否是新的或不不是事务 - 创建实体之后,但在这之前你的代码可能会失败.如果你想做什么有副作用,你应该在交易中做.