Функция 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() это был запрос другой модели, поэтому транзакция не удалась.

Проверьте свои хуки, если случится, что с этой ошибкой.

Другие вопросы по тегам