【发布时间】: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