簡體   English   中英

使用python pyodbc捕獲存儲過程輸出

[英]Capture stored procedure output with python pyodbc

我有一個使用Python腳本和Pyodbc模塊調用的存儲過程。 代碼如下:

import pyodbc
pyodbc.pooling=False
oConnexion = pyodbc.connect("driver={Teradata};dbcname=myServer;DefaultDatabase=myDB;uid=myUser;pwd=myPassword;charset=utf8;", autocommit=True)
oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
oConnexion.setencoding(encoding='utf-8')
oCursor = oConnexion.cursor()
oQueryRegisterBatch = "CALL DEV_AUDIT.SP_AUDIT_BATCH('ED_DATA_QUALITY_MANUAL', 'REGISTER', '1900-01-01 00:00:00.000000', '2999-12-31 00:00:00.000000');"
oCursor.execute(oQueryRegisterBatch)
for row in oCursor:
    print (row)

該存儲過程將創建一個新記錄,並返回記錄ID(BATCH_KEY)。 在Teradata中執行存儲過程時,它會正確返回BATCH_KEY,但無法在Python中捕獲它。 我收到以下錯誤消息,而不是值:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: No results.  Previous SQL was not a query.

我可以在調用存儲過程后通過查詢表來檢索BATCH_KEY,但我想避免這樣做。 您能否建議如何捕獲存儲過程的輸出?

謝謝

根據pyodbc軟件包的文檔,不可能捕獲存儲過程的輸出。 在此處記錄: https : //github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures

pyodbc當前不實現可選的.callproc方法。

有一種解決方法可能會起作用,具體取決於您的數據庫引擎,該引擎會將對存儲過程的調用嵌入查詢中。

因為pyodbc沒有.callproc,所以我們需要使用一種變通方法來檢索輸出參數和返回值的值。 具體方法取決於您特定的ODBC驅動程序支持什么,但是對於Microsoft的SQL Server ODBC驅動程序,我們可以使用“匿名代碼塊”執行存儲過程,然后選擇輸出參數和/或返回值。

在上面的鏈接中查看詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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