【问题标题】:with transaction.atomic() not working for Azure SQL Database使用 transaction.atomic() 不适用于 Azure SQL 数据库
【发布时间】:2019-07-24 08:26:06
【问题描述】:

我使用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'
    }
}

【问题讨论】:

  • 没有错误信息?
  • 不幸的是,Python shell 中根本没有输出
  • 您是否将 AUTOCOMMIT 设置为 true?
  • @LeoYue - 非常感谢您的帮助!在我的设置中,我根本没有设置 AUTOCOMMIT——默认值应该是 True。但是,我只是尝试在我的设置中将其设置为False。我编辑了问题,以便您可以看到我进一步采取的措施。
  • 如果你设置AUTOCOMMIT = False并且代码不会更新行,我认为事务运行良好。

标签: django azure-sql-database django-pyodbc-azure


【解决方案1】:

请确保您已在数据库设置中设置了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-azureconfiguration

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

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

希望这会有所帮助。

【讨论】:

  • 我的设置完全相同,只是我使用的是'driver': 'ODBC Driver 17 for SQL Server'。关于AUTOCOMMIT = False - 最后我执行transaction.commit() 时不应该更新该行吗?
  • @RaideR 试试吧。我认为您需要进行很多测试,也许您可​​以找到解决方案。很抱歉,目前我能为您提供的帮助仅此而已。
猜你喜欢
  • 2018-07-24
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多