簡體   English   中英

SQLalchemy:query 返回一個非結果

[英]SQLalchemy:query returns a non-result

我在獲取由 sqlalchemy 調用的存儲過程返回的結果時遇到問題,我看到即使存儲過程返回一個整數 sql alcehmy。 結果集設置為無,這導致了一些問題,有人可以告訴我這是怎么回事嗎?

CREATE PROCEDURE [SYSDATA].[getCertificateInstallStatus] 
@DVSystemName [varchar](max)
AS
BEGIN
declare @system_state int = (SELECT state FROM SYSDATA.certificate where DVSystemName = @DVSystemName)
if @system_state is not NULL
    Return @system_state
Return 0
END

現在執行這個存儲過程:

DECLARE @return_value int

EXEC    @return_value = [SYSDATA].[getCertificateInstallStatus]
        @DVSystemName = N'UATDSG'

SELECT  'Return Value' = @return_value

GO

調用此過程返回:

Return Value
0

Python錯誤跟蹤:

回溯(最近一次調用):文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/SQLAlchemy-1.2.7-py3.6-macosx-10.9-x86_64.egg /sqlalchemy/engine/result.py", line 1067, in _fetchone_impl return self.cursor.fetchone() AttributeError: 'NoneType' object has no attribute 'fetchone'

在處理上述異常的過程中,又出現了一個異常:...... File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/SQLAlchemy-1.2.7-py3. 6-macosx-10.9-x86_64.egg/sqlalchemy/engine/result.py”,第 1089 行,在 _non_result “此結果對象不返回行。” sqlalchemy.exc.ResourceClosedError:此結果對象不返回行。 它已自動關閉。

意外結果的解釋是存儲過程中的語句沒有返回結果集,它返回一個整數值。 這會導致另一個問題 - 當存儲過程返回非零值(使用RETURN語句)時,這表示失敗。

您需要更改存儲過程,並且您至少有兩個選擇:1) 返回結果集或 2) 使用輸出參數。

返回結果集的存儲過程:

CREATE PROCEDURE [SYSDATA].[getCertificateInstallStatus] 
    @DVSystemName [varchar](max)
AS
BEGIN
    SET NOCOUNT ON

    SELECT COALESCE([state], 0) AS [SystemState]
    FROM SYSDATA.certificate 
    WHERE DVSystemName = @DVSystemName)

    RETURN 0
END

帶有輸出參數的存儲過程:

CREATE PROCEDURE [SYSDATA].[getCertificateInstallStatus] 
    @DVSystemName [varchar](max),
    @SystemState int OUTPUT
AS
BEGIN
    SET NOCOUNT ON

    SELECT @SystemState = COALESCE([state], 0) 
    FROM SYSDATA.certificate 
    WHERE DVSystemName = @DVSystemName

    RETURN 0
END

暫無
暫無

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

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