2
私はget_or_insertを使いたいですが、それがちょうど作成されたか、または既存のエントリからフェッチされたことをどのように知っていますか?get_or_insert、作成または取得されたことを知る方法?
私はget_or_insertを使いたいですが、それがちょうど作成されたか、または既存のエントリからフェッチされたことをどのように知っていますか?get_or_insert、作成または取得されたことを知る方法?
一言で言えば、できません。 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.
ちょうどあなたがそれを使用する場合ことを心に留めて上記のレシピ、エンティティが新規であるかどうかに基づいて行うことはトランザクションではありません。エンティティの作成後、その前にコードが失敗する可能性があります。あなたがしたいことが副作用を持っているなら、おそらくトランザクションの中でそれを行うべきです。