0

我的环境是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() 没有回滚我的事务,因为数据仍在更新到数据库中。

4

1 回答 1

2

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

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

DATABASE_OPTIONS = {"init_command": "SET storage_engine=INNODB"}
于 2012-12-28T09:05:04.820 回答