django - 事务回滚失败Some non-transactional changed tables couldn't be rolled back

一个好的Django专题少不了您的贡献:点我进入专题

事务的使用方法,更多用法参考官网transactions

def viewfunc(request):
    # 默认autocommit 既生成一条sql就提交到数据库
    do_stuff()
    with transaction.atomic():
        # This code executes inside a transaction.
        do_more_stuff()

错误:
事务执行中遇到错误没有正常回滚,既默认的autocommit

原因产生在数据库上。找django的原因找了半天。。(背锅了)

最终检查控制台输出发现有这么一句话
Some non-transactional changed tables couldn't be rolled back
原因大致为:mysql数据表的引擎默认 为"MyISAM"不支持事务
解决:打开mysql配置文件 找到default-storage-engine=

支持 INNODB 引擎模式。修改为 default-storage-engine=INNODB 即可。
如果 INNODB 模式如果不能启动,删除data目录下ib开头的日志文件重新启动。

你可能感兴趣的:(django - 事务回滚失败Some non-transactional changed tables couldn't be rolled back)