【问题标题】:Set "SET IMPLICIT_TRANSACTIONS" attribute ON/OFF for a pyodbc connection为 pyodbc 连接设置“SET IMPLICIT_TRANSACTIONS”属性 ON/OFF
【发布时间】:2020-03-03 16:48:00
【问题描述】:

我正在尝试在我的 python 代码中使用 pyodbc 包创建到 SQL Server 11.0.5058 的连接,并且想知道是否可以使用 pyodbc 连接将属性“SET IMPLICIT_TRANSACTIONS”设置为开/关目的。 我需要在我的连接对象上设置此属性,以便我可以执行存储过程,并且在此事务期间没有隐式事务。我只从视图中选择的存储过程,没有更新或更改。

我正在使用的连接字符串:

            self.connection = pyodbc.connect(connection_string, timeout=TIMEOUT_FOR_QUERY,
                                         attrs_before={SQL_ATTR_CONNECTION_TIMEOUT: TIMEOUT_FOR_CONNECTION},
                                         autocommit=False)

执行存储过程代码sn -p(我只是传递存储过程名称和参数):

                stringToProcess = '{CALL ' + stored_procedure_name + ' (' + nbofParamt_str + ')}'

            self.cursor.execute(stringToProcess , tuple(parameters))

附:我没有 SET IMPLICIT_TRANSACTIONS {开 |在我的 stored_procedure 脚本中关闭}。我是否需要在脚本中设置它,而不是在 pyodbc 连接对象中?

【问题讨论】:

  • 仅供参考,SQL Server 版本 11.0.5058 是 2012 SP2。 SP2 具有已知的安全漏洞。您是否有任何理由至少没有安装 GDR 更新? SP4 是在 3 年前推出的(它也有 GDR 更新)。为什么你的服务器没有打补丁?
  • @Larnu 在这里感谢您的反馈,但是“为什么不修补服务器”并没有在这里添加任何价值,直到它与 implcit_transaction 属性相关。另外TBH我对补丁没有任何看法。
  • 恕我直言,但如何提醒您注意您使用的软件存在安全漏洞并没有为您带来价值?不,这与您的问题无关,但是,它警告您需要修补您的服务器。它运行 5 年前的 SQL Server 版本,该版本仅提供扩展支持。安全很重要。

标签: python sql sql-server python-3.x pyodbc


【解决方案1】:

对于 SQL Server 的 ODBC Driver 17 和当前版本的 SQL Server,默认值为

set implicit_transactions off

如果您认为您的环境中的情况可能有所不同,您可以使用 T-SQL 文档here中的以下 T-SQL sn-p 进行检查

DECLARE @IMPLICIT_TRANSACTIONS VARCHAR(3) = 'OFF';  
IF ( (2 & @@OPTIONS) = 2 ) SET @IMPLICIT_TRANSACTIONS = 'ON';  
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;

【讨论】:

    猜你喜欢
    • 2022-12-21
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多