繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM