首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >transaction.atomic()不适用于Azure SQL数据库

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

Stack Overflow用户
提问于 2019-07-24 08:26:06
回答 1查看 282关注 0票数 1

我使用django-pyodbc-azure 2.1.0.0作为与Azure数据库的连接,该数据库运行良好。

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

但是,此代码将立即更新行。我想,20秒后行将被更新。

代码语言:javascript
复制
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时,下面的代码将根本不更新该行。

代码语言:javascript
复制
MyModel.objects.filter(id=1).update(my_field='Test')
time.sleep(20)
transaction.commit()

我现在的settings.py

代码语言:javascript
复制
'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'
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-07-24 09:53:45

请确保在数据库设置上设置了AUTOCOMMIT=true

代码语言:javascript
复制
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',

        },
    },
}

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

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

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

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57178457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档