与 transaction.atomic() 不适用于 Azure SQL 数据库



我使用django-pyodbc-azure2.1.0.0 与 Azure SQL 数据库进行连接,该数据库工作正常。

当我正确理解django-pyodbc-azure的文档时,应该支持事务。

但是,此代码会立即更新该行。我希望该行在 20 秒后更新。

from django.db import transaction
from myapp.models import MyModel
import time
with transaction.atomic():
MyModel.objects.filter(id=1).update(my_field='Test')
time.sleep(20)

我做错了什么吗?是否需要指定 Azure SQL 数据库上的某些设置?


当我在数据库设置中设置AUTOCOMMIT = False时,以下代码根本不会更新该行。

MyModel.objects.filter(id=1).update(my_field='Test')
time.sleep(20)
transaction.commit()

我目前的settings.py

'azure_reporting': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'reporting_db',
'HOST': 'xxxxxx.database.windows.net',
'PORT': '',
'USER': 'xxxx@xxxxxx.database.windows.net',
'PASSWORD': 'xxxxxx',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server'
}
}

请确保您已设置数据库设置AUTOCOMMIT=true

DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'yourserver.com',
'PORT': '1433',
'NAME': 'your_db',
'USER': 'your_user',
'PASSWORD': 'your_pw',
'AUTOCOMMIT': True,
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
},
}

没有发生错误,我们唯一能做的就是 重新检查django-pyodbc-azure的配置 .

正如您所说:当我在数据库设置中设置 AUTOCOMMIT = False 时,以下代码根本不会更新该行。

我认为交易应该运作良好。

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新