[英]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}'
我感謝您的幫助
非常感謝
非常感謝大家的評論。 最后,在@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()
以下是兩個適合我的例子。 我會用參數顯示,因為我猜你也需要知道如何做到這一點。
使用命名參數:
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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.