Python 3.6 pyodbc to SQL 如何执行SP

Python 3.6 pyodbc to SQL How to execute 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}'

感谢您的帮助

非常感谢

这里有两个对我有用的例子。我将展示参数,因为我猜你也需要知道如何去做。

使用命名参数:

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')}")

根据你的评论,你说你看到了消息

`Process finished with exit code 0'

这意味着一切正常 ok.If 在您的程序中发生任何 exception/error 您的程序应该生成一个带有非零参数的退出代码。

所以我认为你的程序运行良好并且 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')

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

导入 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()