我使用django-pyodbc-azure
2.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 时,以下代码根本不会更新该行。
我认为交易应该运作良好。
希望这有帮助。