AppEngineのドキュメントには、AppEngineのネイティブテクニックを使用してネイティブオブジェクトに対してトランザクションクエリを実行する、トランザクションの例がいくつかあります。
http://www.allbuttonspressed.com/projects/django-nonrel [1]のドキュメントによると、AppEngineトランザクションを使用してDjangoオブジェクトをクエリしたいと思います。これは可能ですか?
def txn():
index = random.randint(0, NUM_SHARDS - 1)
shard_name = "shard" + str(index)
counter = SimpleCounterShard.objects.filter(name=shard_name)
# Make counter if it doesn't exist
if not len(counter):
counter = SimpleCounterShard(name=shard_name)
counter.count += 1
counter.put()
db.run_in_transaction(txn)
これは現在、「トランザクション内で許可されるのは祖先クエリのみ」で失敗します。これが祖先のクラスに関係する何かをするように私に求めていることは理解していますが、何が、なぜかはわかりません。
任意のヒント?
[1]「DjangoのトランザクションAPIを使用することはできません。特定のDBが特別な種類のトランザクション(App Engineのrun_in_transaction()など)をサポートしている場合は、プラットフォーム固有の関数を使用する必要があります。」