Предоставление аргументов для транзакций в Datastore Plus (NDB) - PullRequest
1 голос
/ 06 апреля 2011

У меня возникают проблемы при разработке способа передачи аргументов в транзакции при использовании Datastore Plus.

Может кто-нибудь переписать этот пример кода с обычным хранилищем данных?

from google.appengine.ext import db

class Accumulator(db.Model):
    counter = db.IntegerProperty()

def increment_counter(key, amount):
    obj = db.get(key)
    obj.counter += amount
    obj.put()

q = db.GqlQuery("SELECT * FROM Accumulator")
acc = q.get()

db.run_in_transaction(increment_counter, acc.key(), 5)

I 'Меня особенно интересует хранилище данных плюс эквивалент этой последней строки.

Пример кода хранилище данных плюс документация вообще не имеет дело с аргументами (жестко закодированными внутри транзакции).

1 Ответ

6 голосов
/ 06 апреля 2011

Предполагая, что вы можете следовать примеру из документов, ответ заключается в использовании лямбда (или именованной вспомогательной функции).Например,

yield context.transaction(lambda: increment_counter(acc.key(), 5))
...