1

Google App Engineは、「BadRequestError:トランザクション内で許可されるのは祖先クエリのみ」を返します。これは、コードのコンテキストではどういう意味ですか?

class Counter(db.Model):
        totalRegistrations = db.IntegerProperty(default=0)   

@db.transactional
def countUsers():
    counter = Counter.all().get()
    counter.totalRegistrations = counter.totalRegistrations + 1
    counter.put()
    i = counter.totalRegistrations
    return i

print countUsers()
4

1 に答える 1

3

これは、実行するクエリがCounter.all().get()祖先クエリではないことを意味します。この場合、次のように、トランザクションメソッドからカウンターをフェッチするクエリを取得する必要があります。

@db.transactional
def incrementUsers(counterKey):
    counter = Counter.get(counterKey)
    counter.totalRegistrations = counter.totalRegistrations + 1
    counter.put()
    return counter.totalRegistrations

counterKey = Counter.all(keys_only=True).get()

print incrementUsers(counterKey)

つまり、最初にCounterへの参照を取得しますが、トランザクションメソッドで値を取得して配置するだけで、アトミック性が保証されます。

于 2012-05-19T01:10:50.563 に答える