Python:pyodbc执行带参数的存储过程
Python: Pyodbc execute stored procedure with parameters
我在使用 Python 3.4 执行 SQL 服务器存储过程时遇到问题。我正在导入 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)
我得到一个看起来很奇怪的结果。没有任何内容被插入存储过程中的目标 table。
exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=? (0, 0, 'string', 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)
我认为缺少的是提交。 运行 针对游标的提交方法:
cursor.execute(sql, params)
cursor.commit()
或在创建连接时设置 autocommit=True
,如提供的其他答案一样。该连接用于创建游标,因此在调用 execute()
时自动提交行为是它固有的:
cnxn = pyodbc.connect(driver="<driver>", server="<server>",
database="<database>", uid="<username>", pwd="<password>",
autocommit=True)
我在使用 Python 3.4 执行 SQL 服务器存储过程时遇到问题。我正在导入 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)
我得到一个看起来很奇怪的结果。没有任何内容被插入存储过程中的目标 table。
exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=? (0, 0, 'string', 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)
我认为缺少的是提交。 运行 针对游标的提交方法:
cursor.execute(sql, params)
cursor.commit()
或在创建连接时设置 autocommit=True
,如提供的其他答案一样。该连接用于创建游标,因此在调用 execute()
时自动提交行为是它固有的:
cnxn = pyodbc.connect(driver="<driver>", server="<server>",
database="<database>", uid="<username>", pwd="<password>",
autocommit=True)