App Engine ndb.transaction功能无法正常工作

时间:2014-04-30 03:34:05

标签: python google-app-engine app-engine-ndb

任何人都可以指出交易功能中不允许这部分内容吗?

@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 个答案:

答案 0 :(得分:1)

我弄清楚我的代码有什么问题所以我没有费心去提供其他细节。

问题是,item有_pre_put_hook()查询另一个模型,因此事务失败。

检查您的挂钩是否碰巧遇到此错误。