Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Django如何确定我的数据库是否支持事务?_Mysql_Django_Transactions_Innodb - Fatal编程技术网

Mysql Django如何确定我的数据库是否支持事务?

Mysql Django如何确定我的数据库是否支持事务?,mysql,django,transactions,innodb,Mysql,Django,Transactions,Innodb,在我的开发机器上,我可以使用transaction.commit\u On\u success和transaction.commit\u manually,但在我的生产机器上,装饰器被忽略,Django的行为就好像我的数据库不支持事务一样。这在我的视图函数和我在Django shell中编写的普通测试函数中都会发生: >>> from django.db import transaction >>> from myapp.models import * >

在我的开发机器上,我可以使用
transaction.commit\u On\u success
transaction.commit\u manually
,但在我的生产机器上,装饰器被忽略,Django的行为就好像我的数据库不支持事务一样。这在我的视图函数和我在Django shell中编写的普通测试函数中都会发生:

>>> from django.db import transaction
>>> from myapp.models import *
>>> @transaction.commit_on_success
... def blah():
...   MyModel.objects.create(name="wazzup")
...   raise Exception
... 
>>> blah()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/local/python-environments/myenv/lib/python2.6/site-packages/django/db/transaction.py", line 209, in inner
    return func(*args, **kwargs)
  File "<console>", line 4, in blah
Exception
>>> MyModel.objects.all()       
[<MyModel: wazzup>]
来自django.db导入事务的
>
>>>从myapp.models导入*
>>>@transaction.commit_on_成功
... def blah():
...   MyModel.objects.create(name=“wazzup”)
...   引发异常
... 
>>>废话
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/opt/local/python environments/myenv/lib/python2.6/site packages/django/db/transaction.py”,第209行,在内部
返回函数(*args,**kwargs)
文件“”,第4行,毫无意义
例外情况
>>>MyModel.objects.all()
[]
如果我实例化模型对象,然后对它们调用
save
,而不是在管理器上调用
create
,也会发生同样的情况<代码>手动提交以同样的方式失败。总之,
autocommit
似乎卡在接通位置

但只在生产机器上。在我的MacBook Pro上一切正常

这两个环境都使用MySQL,所有表都在InnoDB上运行。Django 1.4.3,Python 2.6.6

如果您能想到我在settings.py、MySQL配置或其他任何地方可能做错了什么,我将不胜感激。我将把头撞在墙上,并愿意接受任何建议。

这样做:

from django.db import connection
if connection.features.supports_transactions:
    # We _do_ have transaction support.
else:
    # We _don't_ have transaction support. 

尝试执行
设置全局常规日志=1。然后在两个实例上运行问题中的代码,然后比较mysql.log详细信息。希望您能发现日志消息中的差异,这将告诉您错误所在。感谢Austin,我将尝试此方法,如果它告诉我什么,请告诉您。要回答Django如何确定您的数据库是否支持事务的问题,看看
django/db/backends/\uuuuu init\uuuuuuuuu.py
文件的
BaseDatabaseFeatures
类的
支持事务
方法:谢谢Nick——我自己也能找到,但有时这样问会节省很多时间。但我仍然感到困惑,因为我找不到任何检查BaseDatabaseFeatures.supports_事务值的代码(除了Django的测试代码)。也就是说,格雷平什么也没找到。你知道某个地方的客户端代码吗?