簡體   English   中英

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

我感謝您的幫助

非常感謝

非常感謝大家的評論。 最后,在@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM