gpt4 book ai didi

mysql - Django 如何判断我的数据库是否支持事务?

转载 作者:行者123 更新时间:2023-11-29 03:40:29 25 4
gpt4 key购买 nike

在我的开发机器上,我可以使用 transaction.commit_on_successtransaction.commit_manually,但在我的生产机器上,装饰器被忽略,Django 的行为就好像我的数据库没有t 支持交易。这在我的 View 函数和我在 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>]

如果我实例化模型对象,然后对它们调用 save 而不是仅对管理器调用 create,就会发生同样的事情。 commit_manually 以同样的方式失败。总而言之,autocommit 似乎卡在了 on 位置。

但仅限于生产机器上。在我的 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.

关于mysql - Django 如何判断我的数据库是否支持事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14679137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com