データストア関数

注: 新しいアプリケーションを作成する際は、NDB クライアント ライブラリを使用することを強くおすすめします。NDB クライアント ライブラリには、Memcache API によるエンティティの自動キャッシュをはじめ、このクライアント ライブラリにはないメリットがあります。古い DB クライアント ライブラリを現在使用している場合は、DB から NDB への移行ガイドをお読みください。

このページで説明する関数は、google.appengine.ext.db パッケージで定義されています。

関数

allocate_ids (model, count)

Datastore の種類と親の組み合わせに、Datastore の ID バッチを割り当てます。

この方法で割り当てられた ID は、Datastore の自動 ID シーケンス生成ツールで使用されませんが、エンティティ キーで競合の心配をせず使用できます。

引数

model
ID バッチを割り当てるモデルキー。これは通常のキーですが、使用する ID シーケンスを特定するにはキーの親と種類が必要になります。
count
割り当てる ID の数。

割り当てられる最初の ID と最後の ID のタプルを返します。たとえば、この関数を使用して 10 個の ID を割り当てると、(1, 10)の形式で値が返されます。作成された ID の完全なリストが返されるわけではありません。

ID の割り当てと使用例:

# allocate for MyModel without an instance
handmade_key = db.Key.from_path('MyModel', 1)
first_batch = db.allocate_ids(handmade_key, 10)
first_range = range(first_batch[0], first_batch[1] + 1)

# or allocate using an existing key
model_instance = MyModel.all().get()
second_batch = db.allocate_ids(model_instance.key(), 10)
second_range = range(second_batch[0], second_batch[1] + 1)

# and then use them! woo!
my_id = second_range.pop(0)
new_key = db.Key.from_path('MyModel', my_id)
new_instance = MyModel(key=new_key)
new_instance.put()
assert new_instance.key().id() == my_id

# the Datastore will not assign ids in first_batch or second_batch
another_instance = MyModel()
another_instance.put()
assert another_instance.key().id() not in first_range
assert another_instance.key().id() not in second_range
allocate_ids_async (model, count)

Datastore の種類と親の組み合わせに、Datastore の ID バッチを非同期で割り当てます。

この関数は、非同期オブジェクトを返す点を除き、allocate_ids() と同じです。 get_result() を呼び出すと、戻り値に応じて呼び出しをブロックし、結果を返すことができます。

引数

model
ID シーケンスを指定し、ID を割り当てるテンプレートとして機能する db.Model インスタンス、キーまたは文字列。返された ID は、このキーと親が同じであり(存在する場合)、同じ種類のエンティティで使用する必要があります。
count
割り当てる ID の数。

割り当てられる最初の ID と最後の ID のタプルを返します。たとえば、この関数を使用して 10 個の ID を割り当てると、(1, 10)の形式で値が返されます。作成された ID の完全なリストが返されるわけではありません。

allocate_id_range (model, start, end, **kwargs)

特定のエンドポイントの ID の範囲を割り当てます。これらの ID が割り当てられると、新しく作成したエンティティに ID を手動で割り当てることができます。

Datastore の自動 ID 割り当てツールは、ID の自動割り当てまたは明示的な `allocate_ids` 呼び出しで割り当て済みのキーを割り当てません。このため、特定のキー範囲に書き込まれたエンティティが上書きされることはありません。ただし、この範囲に手動で割り当てたキーのエンティティを作成すると、返されたキー範囲の状態によっては、既存のエンティティ(あるいは、別のリクエストで作成された新しいエンティティ)が上書きされる場合があります。

この関数は、予約する数値 ID 範囲が存在する場合にだけ利用してください(たとえば、ID のあるエンティティを一括で読み込む場合など)。受け取る ID を確認する必要がない場合には、代わりに allocate_ids() を使用します。

引数

model
ID シーケンスを指定し、ID を割り当てるテンプレートとして機能する db.Model インスタンス、キーまたは文字列。返された ID は、このキーと親が同じであり(存在する場合)、同じ種類のエンティティで使用する必要があります。
start
最初に割り当てる ID。数値です。
end
最後に割り当てる ID。数値です。

KEY_RANGE_EMPTYKEY_RANGE_CONTENTIONKEY_RANGE_COLLISION)のいずれかを返します。KEY_RANGE_EMPTY でない場合、割り当てられたキー範囲の使用で問題が発生している可能性があります。

create_transaction_options (**kwargs)

トランザクション実行を制御するためのトランザクション オプション オブジェクト(クラス TransactionOptions)を作成します。返されたオブジェクトは run_in_transaction_options() 関数の最初の引数として渡します。

引数

propagation
このトランザクション関数が別のトランザクション内から呼び出された場合の処理内容:
ALLOWED
すでにトランザクション中の場合は、そのトランザクションを引き続き使用します。それ以外の場合は、トランザクションを開始します。

注: このポリシーを使用する関数が例外をスローした場合、例外をキャッチして外側のトランザクションを commit することは安全ではありません。関数によって外側のトランザクションが不適切な状態に置かれている可能性があります。

MANDATORY
既存のトランザクション内で続行します(該当する場合)。それ以外の場合は、 BadRequestError 例外が発生します。

注: このポリシーを使用する関数が例外をスローした場合、例外をキャッチして外側のトランザクションを commit することは安全ではありません。関数によって外側のトランザクションが不適切な状態に置かれている可能性があります。

INDEPENDENT
既存のトランザクションを一時停止して、新しいトランザクションを作成します。

注: このポリシーを使用する関数では、新しいトランザクション内で読み取ったエンティティを返さないようにしてください。これは、新しいトランザクション内で読み取ったエンティティと、外側のトランザクションとの間に、トランザクションの一貫性がないためです。

NESTED
(現時点ではサポートされていません)既存のトランザクション内に、ネストされたトランザクションを作成します。
xg
True の場合、クロスグループ(XG)トランザクションを許可します。ブール値以外を設定すると、BadArgumentError 例外が発生します。
retries
トランザクションの commit が失敗した場合に再試行する回数。
deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。

以下の例では、後続のクロスグループ(XG)トランザクションのオプションを作成します。

from google.appengine.ext import db

xg_on = db.create_transaction_options(xg=True)

def my_txn():
  x = MyModel(a=3)
  x.put()
  y = MyModel(a=7)
  y.put()

db.run_in_transaction_options(xg_on, my_txn)
delete (models, deadline=60)

Datastore から 1 つ以上のモデル インスタンスを削除します。

引数

models
モデル インスタンス、モデル インスタンスのエンティティ キー / リスト(他のイテラブル)または削除するエンティティ キー。
deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。

put() と同様に、複数のキーが指定する場合、それらのキーは複数のエンティティ グループ内にあってもかまいません。

オペレーション中にエラーが発生すると、エンティティの一部が削除されていても例外が発生します。例外が発生せずに呼び出しが完了した場合、すべてのエンティティが正常に削除されています。

注意: オペレーションがトランザクション内で実行されない限り、1 回のオペレーションで複数のエンティティを削除してもアトミックに削除されるとは限りません。クエリを強整合性で実行しても、Datastore にクエリを送信する他のプロセスで矛盾する結果が生成される可能性があります。

delete_async (models, deadline=60)

Datastore から 1 つ以上のモデル インスタンスを非同期で削除します。

この関数は、非同期オブジェクトを返す点を除き、delete() と同じです。 get_result() を呼び出すと、戻り値に応じて呼び出しをブロックできます。

引数

models
モデル インスタンス、モデル インスタンスのエンティティ キー / リスト(他のイテラブル)または削除するエンティティ キー。
deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。

put() と同様に、複数のキーが指定する場合、それらのキーは複数のエンティティ グループ内にあってもかまいません。

この関数が返すオブジェクトを使用すると、呼び出しの結果に応じてブロックできます。

オペレーション中にエラーが発生すると、エンティティの一部が削除されていても例外が発生します。例外が発生せずに呼び出しが完了した場合、すべてのエンティティが正常に削除されています。

注意: オペレーションがトランザクション内で実行されない限り、1 回のオペレーションで複数のエンティティを削除してもアトミックに削除されるとは限りません。クエリを強整合性で実行しても、Datastore にクエリを送信する他のプロセスで矛盾する結果が生成される可能性があります。

get (keys, read_policy=STRONG_CONSISTENCY, deadline=60)

Datastore のキーを使用して、特定のモデル インスタンスをフェッチします。

引数

keys
取得するエンティティのキー、キーの文字列表現、またはキーあるいはキーの文字列表現のリスト。
read_policy
目的のデータ整合性レベルを指定する読み取りポリシー
STRONG_CONSISTENCY
最新の結果を保証します。ただし、単一のエンティティ グループに限定されます。
EVENTUAL_CONSISTENCY
複数のエンティティ グループにわたる読み取りが可能ですが、返される結果は最新のものではないことがあります。一般に、結果整合性クエリのほうが強整合性クエリよりも処理時間が短くなりますが、その保証はありません。

注: グローバル(非祖先)クエリでは、この引数は無視されます。

deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。

keys が単一のキー(またはキーの文字列表現)からなる場合、この関数は該当するキーが Datastore 内にあればそのキーに関連付けられているモデル インスタンスを返し、なければ None を返します。keys がリストの場合、戻り値は対応するモデル インスタンスのリストとなります。指定されたキーに関連付けられているエンティティがなければ、None 値のリストを返します。

Model.get() もご覧ください。

get_async (keys, read_policy=STRONG_CONSISTENCY, deadline=60)

指定されたモデル インスタンスを Datastore から非同期でフェッチします。

この関数は、非同期オブジェクトを返す点を除き、get() と同じです。 get_result() を呼び出すと、戻り値に応じて呼び出しをブロックし、結果を返すことができます。

引数

keys
取得するエンティティのキー、キーの文字列表現、またはキーあるいはキーの文字列表現のリスト。
read_policy
目的のデータ整合性レベルを指定する読み取りポリシー
STRONG_CONSISTENCY
最新の結果を保証します。ただし、単一のエンティティ グループに限定されます。
EVENTUAL_CONSISTENCY
複数のエンティティ グループにわたる読み取りが可能ですが、返される結果は最新のものではないことがあります。一般に、結果整合性クエリのほうが強整合性クエリよりも処理時間が短くなりますが、その保証はありません。

注: グローバル(非祖先)クエリでは、この引数は無視されます。

deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。

keys が単一のキー(またはキーの文字列表現)からなる場合、この関数は該当するキーが Datastore 内にあればそのキーに関連付けられているモデル インスタンスを返し、なければ None を返します。keys がリストの場合、戻り値は対応するモデル インスタンスのリストとなります。指定されたキーに関連付けられているエンティティがなければ、None 値のリストを返します。

Model.get() もご覧ください。

get_indexes ()

呼び出し側のアプリケーションに属する複合インデックスのリストを返します。

以下の例では、インデックスを取得して使用しています。

def get_index_state_as_string(index_state):
  return {db.Index.BUILDING:'BUILDING', db.Index.SERVING:'SERVING',
          db.Index.DELETING:'DELETING', db.Index.ERROR:'ERROR'}[index_state]

def get_sort_direction_as_string(sort_direction):
  return {db.Index.ASCENDING:'ASCENDING',
          db.Index.DESCENDING:'DESCENDING'}[sort_direction]

def dump_indexes():
  for index, state in db.get_indexes():
    print "Kind: %s" % index.kind()
    print "State: %s" % get_index_state_as_string(state)
    print "Is ancestor: %s" % index.has_ancestor()
    for property_name, sort_direction in index.properties():
      print "  %s:%s" % (property_name,
                         get_sort_direction_as_string(sort_direction))
get_indexes_async ()

呼び出し側のアプリケーションに属する複合インデックスのリストを非同期で返します。

is_in_transaction ()

トランザクションで現在のスコープが実行されているかどうかを表すブール値を返します。

model_to_protobuf (model_instance)

Model インスタンスのプロトコル バッファをシリアル化します。プロトコル バッファは Google のシリアル化形式で、リモート プロシージャ コールで使用されます。バックアップまたは復元で Datastore オブジェクトのシリアル化を行う場合に使用します。

注意: この関数では、オープンソース プロトコル バッファ形式以外のプロトコルには別の形式を使用します。この形式はオープンソースの実装と互換性がありません。

引数

model_instance
シリアル化するクラス Model(またはサブクラス)のインスタンス。

オブジェクトのプロトコル バッファのシリアル化をバイト文字列として返します。

model_from_protobuf (pb)

プロトコル バッファのシリアル化に基づいて Model インスタンスを作成します。詳細については、model_to_protobuf() をご覧ください。

引数

pb
プロトコル バッファのシリアル化。model_to_protobuf() によって返されます。

該当する種類クラスのオブジェクトを返します。種類クラスが存在しない場合、KindError 例外が発生します。オブジェクトがモデルに有効でない場合は、BadValueError 例外が発生します。

他の Model インスタンスと同様に、put() メソッドを使用して新しいオブジェクトを Datastore に保存できます。このオブジェクトは、プロトコル バッファの作成時に取得したキーを保持します。このキーを持つオブジェクトが Datastore にすでに存在している場合、シリアル化を解除したオブジェクトを保存すると、既存のオブジェクトが上書きされます。

注意: オブジェクトのキーがシステム割り当ての ID を使用し、ID が特定のパスと種類に割り当てられていない場合、保存は成功しますが、ID は予約されません。この ID が今後作成されるオブジェクトに割り当てられる場合があります。その場合、以前のオブジェクトは上書きされます。安全のため、シリアル化されたときに存在していたアプリケーションでのみオブジェクトを復元してください。

model_is_projection (model_instance)

指定されたクエリ(model_instance)が完全なエンティティに対するクエリではなく、射影クエリである場合に True を返します。

引数

model_instance
射影クエリかどうかを確認しているクエリ。

クエリが射影クエリの場合は True を返し、そうでない場合は False を返します。

put (models, deadline=60)

1 つ以上のモデル インスタンスを Datastore に書き込みます。

引数

models
保存するモデル インスタンスまたはモデル インスタンスのリスト。
deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。

複数のモデル インスタンスが存在する場合、複数のエンティティ グループが存在する可能性があります。

オペレーション中にエラーが発生すると、エンティティの一部が書き込まれていても例外が発生します。例外が発生せずに呼び出しが完了した場合、すべてのエンティティが正常に書き込まれています。

models が単一のモデル インスタンスから構成されている場合、この関数は対応する Key オブジェクトを返します。models がリストの場合は、対応する Key オブジェクトのリストを返します。

注意: オペレーションがトランザクション内で実行されない限り、1 回のオペレーションで複数のエンティティを書き込んでも、アトミックに書き込まれるとは限りません。クエリを強整合性で実行しても、Datastore にクエリを送信する他のプロセスで矛盾する結果が生成される可能性があります。

put_async (models, deadline=60)

1 つ以上のモデル インスタンスを Datastore に書き込みます。

この関数は、非同期オブジェクトを返す点を除き、put() と同じです。 get_result() を呼び出すと、戻り値に応じて呼び出しをブロックし、結果を返すことができます。

引数

models
保存するモデル インスタンスまたはモデル インスタンスのリスト。
deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。

複数のモデル インスタンスが存在する場合、複数のエンティティ グループが存在する可能性があります。

オペレーション中にエラーが発生すると、エンティティの一部が書き込まれていても例外が発生します。例外が発生せずに呼び出しが完了した場合、すべてのエンティティが正常に書き込まれています。

この関数は、 get_result() を呼び出すことができる非同期オブジェクトを返します。返される結果は put() と同じです。

注意: オペレーションがトランザクション内で実行されない限り、1 回のオペレーションで複数のエンティティを書き込んでも、アトミックに書き込まれるとは限りません。クエリを強整合性で実行しても、Datastore にクエリを送信する他のプロセスで矛盾する結果が生成される可能性があります。

query_descendants (model_instance)

モデル インスタンスのすべての子孫のクエリを返します。

引数

model_instance
検索する子孫のモデル インスタンス。
run_in_transaction (function, *args, **kwargs)

Datastore の更新を含む関数を 1 つのトランザクションで実行します。トランザクションの実行中に任意のコードで例外が発生すると、トランザクションで行われた更新がすべてロールバックされます。または、@db.transactional() デコレータを使用することもできます。

引数

function
実行する関数。
args
関数に渡す位置引数。
kwargs
関数に渡すキーワード引数。

関数が値を返すと、run_in_transaction() が値を呼び出し側に返します。

関数で例外が発生すると、トランザクションがロールバックされます。例外が Rollback 例外の場合、再度発生することはありません。他の例外の場合、呼び出し側で同じ例外が発生します。

Datastore は、楽観的ロックを使用してトランザクションを再試行します。関数が準備したトランザクションを commit できない場合、run_in_transaction() は関数を再度呼び出し、トランザクションを最大 3 回まで再試行します(異なる再試行回数を変更するには、 run_in_transaction_custom_retries() を使用します)。1 回のトランザクションでトランザクション関数が複数回呼び出される可能性があるため、引数の変更などの副作用がないようにしてください。

高い競合発生率などが原因でトランザクションを commit できない場合、 TransactionFailedError 例外が発生します。

from google.appengine.ext import db

class Counter(db.Model):
  name = db.StringProperty()
  count = db.IntegerProperty(default=0)

def decrement(key, amount=1):
  counter = db.get(key)
  counter.count -= amount
  if counter.count < 0:        # Don't let counter go negative
    raise db.Rollback()
  db.put(counter)

q = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", "foo")
counter = q.get()
db.run_in_transaction(decrement, counter.key(), amount=5)
run_in_transaction_custom_retries (retries, function, *args, **kwargs)

Datastore の更新を含む関数を 1 つのトランザクションで実行します。競合が発生した場合、指定された回数、トランザクションを再試行します。トランザクションの実行中に任意のコードで例外が発生すると、トランザクションで行われた更新がすべてロールバックされます。

再試行回数の指定を除き、この関数の動作は run_in_transaction() と同じです。

引数

retries
エンティティ グループ内で競合が発生したとき(複数のユーザーがグループを同時に変更した場合)に関数を呼び出す最大回数。
function
実行する関数。
args
関数に渡す位置引数。
kwargs
関数に渡すキーワード引数。
run_in_transaction_options (options, function, *args, **kwargs)

トランザクション オプション オブジェクトに指定されたオプションを使用して、Datastore の更新を含む関数を 1 つのトランザクションで実行します。トランザクションの実行中に任意のコードで例外が発生すると、トランザクションで行われた Datastore の更新がすべてロールバックされます。

クロスグループ(XG)トランザクションの場合、トランザクション オプション オブジェクトの xg パラメータを True に設定する必要があります。

引数

options
このトランザクションで使用される設定を含むトランザクション オプション オブジェクト。XG トランザクションを有効にするには、xg パラメータを True に設定する必要があります。
function
実行する関数。
args
関数に渡す位置引数。
kwargs
関数に渡すキーワード引数。

関数が値を返すと、run_in_transaction_options() が値を呼び出し側に返します。

関数で例外が発生すると、トランザクションがロールバックされます。例外が Rollback 例外の場合、再度発生することはありません。他の例外の場合、呼び出し側で同じ例外が発生します。

Datastore は、楽観的ロックを使用してトランザクションを再試行します。関数が準備したトランザクションを commit できない場合、run_in_transaction_options() は関数を再度呼び出し、トランザクション オプション オブジェクトで指定された試行回数に達するまでトランザクションを再試行します。1 回のトランザクションでトランザクション関数が複数回呼び出される可能性があるため、引数の変更などの副作用がないようにしてください。

高い競合発生率などが原因でトランザクションを commit できない場合、 TransactionFailedError 例外が発生します。

以下の例では、この関数を使用してクロスグループ トランザクションを実行しています。

from google.appengine.ext import db

xg_options = db.create_transaction_options(xg=True)

def my_txn():
  x = MyModel(a=3)
  x.put()
  y = MyModel(a=7)
  y.put()

db.run_in_transaction_options(xg_options, my_txn)
to_dict (model_instance, dictionary=None)

モデル インスタンスの辞書表現を作成して返します。

引数

model_instance
コピーするモデル インスタンス。
dictionary
モデルのデータを統合する辞書(存在する場合)。モデル値が辞書の値を上書きします。モデル インスタンスのフィールドに対応していない辞書エントリは維持されます。

デコレータ

@db.transactional (propagation=ALLOWED, xg=False, retries=3, deadline=60)

db トランザクション内で関数を実行します。したがって、run_in_transaction(func) の代わりに、func() を呼び出すことができます。

引数

propagation
このトランザクション関数が別のトランザクション内から呼び出された場合の処理内容:
ALLOWED
すでにトランザクション中の場合は、そのトランザクションを引き続き使用します。それ以外の場合は、トランザクションを開始します。

注: このポリシーを使用する関数が例外をスローした場合、例外をキャッチして外側のトランザクションを commit することは安全ではありません。関数によって外側のトランザクションが不適切な状態に置かれている可能性があります。

MANDATORY
既存のトランザクション内で続行します(該当する場合)。それ以外の場合は、 BadRequestError 例外が発生します。

注: このポリシーを使用する関数が例外をスローした場合、例外をキャッチして外側のトランザクションを commit することは安全ではありません。関数によって外側のトランザクションが不適切な状態に置かれている可能性があります。

INDEPENDENT
既存のトランザクションを一時停止して、新しいトランザクションを作成します。

注: このポリシーを使用する関数では、新しいトランザクション内で読み取ったエンティティを返さないようにしてください。これは、新しいトランザクション内で読み取ったエンティティと、外側のトランザクションとの間に、トランザクションの一貫性がないためです。

NESTED
(現時点ではサポートされていません)既存のトランザクション内に、ネストされたトランザクションを作成します。
xg
True の場合、クロスグループ(XG)トランザクションを許可します。ブール値以外を設定すると、BadArgumentError 例外が発生します。
retries
トランザクションの commit が失敗した場合に再試行する回数。
deadline
Datastore から結果が返されるのを待機する時間の最大値(秒)。この時間を過ぎると処理を中止し、エラーを返します。整数値または浮動小数点値のいずれかを指定できます。デフォルト値(60 秒)を超える値は設定できませんが、デフォルトより短い値に設定することは可能です。これにより、特定のオペレーションが失敗と判定されるまでの時間を短くすることができます(ユーザーへのレスポンスの迅速化、オペレーションの再試行、別のオペレーションの試行、タスクキューへのオペレーションの追加などの目的に利用できます)。
@db.non_transactional (allow_existing=True)

トランザクション内から呼び出されても、db トランザクションの外部で関数を実行します。

引数

allow_existing
True の場合、既存のトランザクション内から関数を呼び出すことができます。False の場合、 BadRequestError 例外をスローします。