我的环境是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()没有回滚我的事务,因为数据仍在更新到数据库。
答案 0 :(得分:2)
如果您将MySQL与MyISAM一起使用,则它不支持事务。如果要使用此功能,请将表更改为InnoDB。
我将以下内容添加到我的settings.py中以自动执行此操作(调用syncdb时):
DATABASE_OPTIONS = {"init_command": "SET storage_engine=INNODB"}