Установите атрибут «SET IMPLICIT_TRANSACTIONS» вкл / выкл для соединения pyodb c - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь создать соединение с SQL Сервером 11.0.5058, используя пакет pyodb c в моем коде python, и хотел бы знать, можно ли установить для свойства 'SET IMPLICIT_TRANSACTIONS' значение Вкл / выкл с использованием объекта соединения pyodb c. Мне нужно установить это свойство в моем объекте соединения, чтобы я мог выполнять хранимую процедуру и НЕ включать неявную транзакцию во время этой транзакции. Хранимые процедуры я выбираю только из представлений, а не обновлений и изменений.

Используемая строка подключения:

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

Фрагмент кода выполнения хранимой процедуры (я просто передаю имя хранимой процедуры и параметры):

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

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

PS У меня нет SET IMPLICIT_TRANSACTIONS {On | OFF} в моем скрипте хранимой_процедуры. Нужно ли устанавливать это в скрипте, а не в объекте соединения pyodb c?

1 Ответ

0 голосов
/ 03 марта 2020

С ODB C Драйвер 17 для SQL Сервер и текущие версии SQL Сервер по умолчанию:

set implicit_transactions off

Если вы считаете, что в вашей среде ситуация может отличаться, вы можете проверить это используя следующий фрагмент T- SQL из документации T- SQL здесь

DECLARE @IMPLICIT_TRANSACTIONS VARCHAR(3) = 'OFF';  
IF ( (2 & @@OPTIONS) = 2 ) SET @IMPLICIT_TRANSACTIONS = 'ON';  
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...