我有一个使用django orm和mysql后端的命令行脚本。我想关闭自动提交并手动提交。为了我的生命,我不能让这个工作。这是剧本的精简版。每次运行此命令时,都会在testtable中插入一行,mysql会发出警告:“无法回滚某些非事务性更改的表”。
#!/usr/bin/python
import os
import sys
django_dir = os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file__), '..')))
sys.path.append(django_dir)
os.environ['DJANGO_DIR'] = django_dir
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
from django.core.management import setup_environ
from myproject import settings
setup_environ(settings)
from django.db import transaction, connection
cursor = connection.cursor()
cursor.execute('SET autocommit = 0')
cursor.execute('insert into testtable values (\'X\')')
cursor.execute('rollback')
我还尝试将insert放在函数中并手动添加django的commit_包装器,如下所示:
@transaction.commit_manually
def myfunction():
cursor = connection.cursor()
cursor.execute('SET autocommit = 0')
cursor.execute('insert into westest values (\'X\')')
cursor.execute('rollback')
myfunction()
我还尝试在settings.py中设置disable_transaction_management=true,但没有成功。我觉得我错过了一些显而易见的东西。非常感谢你能给我任何帮助。谢谢!