0

私の環境はpython2.7.3とdjango1.4.1です

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() が私のトランザクションをロールバックしていないようです。

4

1 に答える 1

2

MyISAM で MySQL を使用している場合、トランザクションはサポートされません。この機能を使用する場合は、テーブルを InnoDB に変更してください。

これを自動的に行うために、以下を settings.py に追加します (syncdb の呼び出し時)。

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