2012-12-28 46 views
0

我的環境是python2.7.3和django1.4.1爲什麼手動事務回滾在Django中不起作用?

我在MyISAM表中使用MySQL。

我的測試代碼:

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

請告訴我們您正在使用的數據庫。 MySQL的?如果是MySQL,您使用的是哪個表引擎(例如MyISAM/InnoDB) –

+0

是的,我使用MySQL – user1934017

+0

MyISAM或InnoDB?或其他? –

回答

2

如果您在MyISAM中使用MySQL,它不支持事務。如果您想使用此功能,請將您的表更改爲InnoDB。

我以下內容添加到我的settings.py來自動設置(調用執行syncdb時):

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