Google App Engineで、トランザクション内から「get_or_insert」を呼び出すことはできますか?
私が尋ねる理由は、すでに実行中のトランザクション内でこれが独自のトランザクションを実行することとの競合があるかどうかわからないためです。
ありがとう!
Google App Engineで、トランザクション内から「get_or_insert」を呼び出すことはできますか?
私が尋ねる理由は、すでに実行中のトランザクション内でこれが独自のトランザクションを実行することとの競合があるかどうかわからないためです。
ありがとう!
実際には、NDBを使用しているか古いdbパッケージを使用しているかによって異なります。Nickの答えは、古いdbパッケージにのみ適用されます。ただし、NDBでは、get_or_insert()が現在のトランザクションに参加します(存在する場合)。トランザクションの外部で呼び出されると、独自のトランザクションが作成されます。これは、 https://developers.google.com/appengine/docs/python/ndb/functions#context_optionsに記載されているpropagation=ALLOWEDのセマンティクスと一致し ます。
(ニックは、既存のトランザクションに参加するときのエンティティグループの制限について正しいです。)
No.get_or_insert
は、レコードをフェッチまたは挿入するトランザクション関数の構文糖衣です。自分で簡単に実装できますが、操作しているレコードが現在のトランザクションの残りのエンティティと同じエンティティグループにある場合、またはクロスグループトランザクションが有効になっている場合にのみ機能します。