Вы передаете имя ключа, поэтому вам следует использовать get_by_key_name
вместо db.get
:
class Counter(db.Model):
counter = db.IntegerProperty()
def increase_counter(key_name):
obj = Counter.get_by_key_name(key_name)
if obj is None:
obj = Counter(key_name=key_name, counter=1)
else:
obj.counter += 1
return obj.put()
db.run_in_transaction(increase_counter, "z"+intValue1+"_"+intValue2+"_"+intValue3)
Редактировать.Если вам действительно нужно передать ключ, вы можете использовать это:
def increase_counter(key, amount=1):
obj = db.get(key) if key else None
if obj:
obj.counter += amount
else:
obj = Counter(counter=amount)
return obj.put()
db_counter_key = None # initially we don't have key value
db_counter_key = db.run_in_transaction(increase_counter, db_counter_key,
amount=len(files_arguments))
(следуя вашему примеру, вам не нужно запускать несколько транзакций, и вместо этого вы можете передать аргумент amount
в качестве значения приращения)
Обратите внимание, что вы можете вернуть obj.put()
, потому что put()
возвращает ключ сущности.