В документации 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] «Вы не можете использовать API транзакций Django. Если ваша конкретная БД поддерживает особый вид транзакции (например, run_in_transaction () в App Engine), вы должны использовать функции, специфичные для платформы».