[英]Python: Pyodbc execute stored procedure with parameters
我在使用Python 3.4执行SQL Server存储过程时遇到问题。 我正在导入Pyodbc以创建连接,并且有几行应该将数据发送到存储过程。
我的Python:
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上看到的任何东西都没有帮助。
我认为缺少的是提交。 对游标运行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)
我发现问题是由于未启用自动提交而引起的。 Pyodbc默认将autocommit设置为False。
要启用自动提交,您可以声明连接,如:
cnxn = pyodbc.connect(driver="<driver>", server="<server>", database="<database>", uid="<username>", pwd="<password>", autocommit=True)
参数通常作为元组传递,所以
params = (irow[0], irow[15], irow[2], irow[6])
应该管用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.