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()
我创建了一个 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()