Python:Pyodbc使用参数执行存储过程

Python:Pyodbc使用参数执行存储过程,python,sql-server,stored-procedures,pyodbc,Python,Sql Server,Stored Procedures,Pyodbc,我在使用Python 3.4执行SQL Server存储过程时遇到问题。我正在导入Pyodbc来创建连接,并且有几行应该将数据发送到存储过程 exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=? (0, 0, 'string', 0) 我的Python: sql = "exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @in

我在使用Python 3.4执行SQL Server存储过程时遇到问题。我正在导入Pyodbc来创建连接,并且有几行应该将数据发送到存储过程

exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=? (0, 0, 'string', 0)
我的Python:

sql = "exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=?"
params = (irow[0], irow[15], irow[2], irow[6])
cursor.execute(sql, params)
执行脚本时,命令提示符中没有错误。当我打印时

print(sql, params)
我得到了一个奇怪的结果。不会将任何内容插入到存储过程中目标的表中

exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=? (0, 0, 'string', 0)
exec@int1=?,@int2=?,@string1=?,@int3=?(0,0,'字符串',0)

我是Python新手,因此任何见解都将不胜感激。我在SO上看到的一切都没有帮助。

参数通常作为元组传递,所以

params = (irow[0], irow[15], irow[2], irow[6])

应该可以工作

我发现问题是由于没有打开自动提交造成的。Pyodbc的自动提交默认设置为False

要启用自动提交,可以声明连接,如下所示:

cnxn = pyodbc.connect(driver="<driver>", server="<server>", database="<database>", uid="<username>", pwd="<password>", autocommit=True)
cnxn=pyodbc.connect(driver=“”、server=“”、database=“”、uid=“”、pwd=“”、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)
cnxn=pyodbc.connect(驱动程序=”,服务器=”,
数据库=”,uid=”,pwd=”,
自动提交=真)

感谢您的回复。那没用。我更新了问题,将括号和存储过程的一部分包括在内。