为什么Django中的手动事务回滚不起作用?

时间:2012-12-28 08:59:30

标签: python django translation

我的环境是python2.7.3和django1.4.1

我正在使用MySQL和MyISAM表。

我的测试代码:

from django.core.management import setup_environ
from myproject import settings
setup_environ(settings)

from myproject.models import *
from django.db import transaction

@transaction.commit_manually
def test_trans():
    r=tab1.objects.get(no="1")
    r.value=100
    r.save()
    transaction.rollback()#I already rollback here, but data is still being updated to the database

def main():
    try:
        test_trans()
    except:
        pass
if __name__ == '__main__':
    main()

似乎transaction.rollback()没有回滚我的事务,因为数据仍在更新到数据库。

1 个答案:

答案 0 :(得分:2)

如果您将MySQL与MyISAM一起使用,则它不支持事务。如果要使用此功能,请将表更改为InnoDB。

我将以下内容添加到我的settings.py中以自动执行此操作(调用syncdb时):

DATABASE_OPTIONS = {"init_command": "SET storage_engine=INNODB"}