Python 3.6 pyodbc to SQL 如何执行 SP



我创建了一个 Python 脚本,使用带有连接 odbc 的光标来执行 SP。我已经尝试了我发现的所有方法,但我无法执行所需的过程。我的代码如下:

import pyodbc
conn = pyodbc.connect( 'DRIVER={SQL Server};'
'SERVER=XXXXXX;'
'DATABASE=XXX;UID=XXXX;'
'PWD=XXX')
cursor = conn.cursor()
cmd_prod_executesp = 'EXECUTE DC_SAS_EvaluationUpdate'
cursor.execute(cmd_prod_executesp)
conn.close()

我试过:

cmd_prod_executesp = '{call DC_SAS_EvaluationUpdate}'
cmd_prod_executesp = 'exec DC_SAS_EvaluationUpdate'
cmd_prod_executesp = '{CALL DC_SAS_EvaluationUpdate}'

感谢您的帮助

非常感谢

非常感谢大家的评论。最后,在@GordThompson的快速评论中,我应用了下面的更改,并且有效。

import pyodbc

conn = pyodbc.connect( 'DRIVER={SQL Server};'
'SERVER=XXXX;'
'DATABASE=XX;UID=XXXX;'
'PWD=XXXX')
cursor = conn.cursor()
cmd_prod_executesp = """EXEC DC_SAS_EvaluationUpdate """
conn.autocommit = True
cursor.execute(cmd_prod_executesp)
conn.close()

这里有两个对我有用的例子。我将显示参数,因为我猜您还需要知道如何做到这一点。

使用命名参数:

cursor.execute('EXEC usp_get_user_data @name = ?, @username = ?', 'tim', 'flipperpa')

使用位置参数:

cursor.execute('EXEC usp_get_user_data ?, ?', None, 'flipperpa')

祝你好运!

我认为您的代码看起来不错,因为您确实遵循了pyodbc的准则

//SQL Server format
cursor.execute("exec sp_dosomething(123, 'abc')")
//ODBC format
cursor.execute("{call sp_dosomething(123, 'abc')}")

从您的评论中,您说您看到了该消息

"进程已完成,退出代码为 0">

这意味着一切正常。如果程序中发生任何异常/错误,程序应生成带有非零参数的退出代码。

所以我认为您的程序运行良好,SP确实被执行了。但是,我怀疑您没有看到更改在数据库中生效可能是因为您在执行 sp 之后和关闭与数据库的连接之前没有commit()更改。

因此,请添加如下conn.commit()

cursor.execute(cmd_prod_executesp)
conn.commit()

编辑: 尝试也尝试使用较新的 MsSQL 驱动程序

conn = pyodbc.connect(driver = '{SQL Server Native Client 10.0}', server = 'xxxxxx',database = 'xxxx', uid = 'xx', pwd = 'xxxx')