[英]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.