У меня проблемы с выполнением хранимой процедуры SQL Server с Python 3.4. Я импортирую Pyodbc для создания соединения и несколько строк, которые должны отправлять данные в хранимую процедуру.
Мой Питон:
sql = "exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=?"
params = (irow[0], irow[15], irow[2], irow[6])
cursor.execute(sql, params)
Хранимая процедура:
@int1 int,
@int2 int,
@string1 varchar(10),
@int3 int
AS
BEGIN
--Do stuff
END
Я не получаю ошибки в командной строке при выполнении сценария. Когда я печатаю
print(sql, params)
Я получаю странный результат. Ничего не вставлено в таблицу, которая предназначена для хранимой процедуры.
exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=? (0, 0, 'string', 0)
Я новичок в Python, поэтому любая оценка будет принята с благодарностью. Ничто из того, что я видел на SO, не помогло.
3 ответа
Я обнаружил, что проблема была вызвана отсутствием функции автоматической фиксации. По умолчанию в Pyodbc для автоматической фиксации установлено значение False.
Чтобы включить автокоммит, вы можете объявить соединение следующим образом:
cnxn = pyodbc.connect(driver="<driver>", server="<server>", database="<database>", uid="<username>", pwd="<password>", autocommit=True)
Я думаю, что не хватает коммита. Либо запустите метод commit для курсора:
cursor.execute(sql, params)
cursor.commit()
Или установите autocommit=True
, когда соединение создано, как в других предложенных ответах. Это соединение используется для создания курсора, поэтому ему присуще поведение автоматической фиксации при вызове execute()
:
cnxn = pyodbc.connect(driver="<driver>", server="<server>",
database="<database>", uid="<username>", pwd="<password>",
autocommit=True)
Параметры обычно передаются в виде кортежа, поэтому
params = (irow[0], irow[15], irow[2], irow[6])
Должно сработать
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.