Функция ndb.transactional в App Engine не работает
Кто-нибудь может указать, какая часть этого не разрешена в транзакционной функции?
@ndb.transactional(propagation=ndb.TransactionOptions.INDEPENDENT)
def set_visibility(action, key):
item = key.get()
key = key.urlsafe()
if item:
key_name = action + '_' + key
cols = memcache.get(key_name)
if cols:
cols = cols.split(',')
for col in cols:
logging.info(key + '>>>>>>>' + col)
if action == 'unhide':
try:
item.uncollege.remove(col)
pass
except:
logging.error(col + ' already found in datastore blacklist of ' + item.banner_id)
else:
if col not in item.uncollege:
item.uncollege.append(col)
pass
else:
logging.error(col + ' already found in datastore blacklist of ' + item.banner_id)
item.put()
else:
logging.error('cant find memcache ' + key_name)
cols = memcache.set(key_name, '')
else:
logging.error('cant find entity ' + key)
1 ответ
Решение
Я понял, что не так с моим кодом, поэтому я не стал вводить дополнительные детали.
Проблема в том, что предмет имеет _pre_put_hook()
это был запрос другой модели, поэтому транзакция не удалась.
Проверьте свои хуки, если случится, что с этой ошибкой.