2012-01-04 12 views

答えて

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. 

ちょうどあなたがそれを使用する場合ことを心に留めて上記のレシピ、エンティティが新規であるかどうかに基づいて行うことはトランザクションではありません。エンティティの作成後、その前にコードが失敗する可能性があります。あなたがしたいことが副作用を持っているなら、おそらくトランザクションの中でそれを行うべきです。

関連する問題