我想使用get_or_insert,但我怎么知道它只是从现有条目创建或获取的。
答案 0 :(得分: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)
以下是你如何使用它:
entity, created = MyKind.my_get_or_insert('foo', bar=123)
if created:
# Do whatever you do with a new entity here.
请记住,如果您将其与上述配方一起使用,那么根据实体是否为新实体而执行的任何操作都不是事务性的 - 您的代码在创建实体之后但在执行此操作之前可能会失败。如果你想做什么有副作用,你应该在交易中做。