2014-11-21 100 views
0

我試圖從MySQL調用存儲過程並獲取OUT參數。 我有這樣一個代碼,在Python無法從存儲過程中檢索OUT參數(MySQL)

from django.db import connection 
# ... 
cursor = connection.cursor() 
out_arg1 = "" 
args = [in_arg1, in_arg2, out_arg1] 
result = cursor.callproc('some_procedure', args) 
print(args[2], result[2]) 
cursor.close() 
# ... 

MySQL的過程

CREATE DEFINER=`root`@`localhost` PROCEDURE `some_procedure`(IN `in_arg1` VARCHAR(255) CHARSET utf8, IN `in_arg2` VARCHAR(255) CHARSET utf8, OUT `out_arg1` VARCHAR(255) CHARSET utf8) 
    MODIFIES SQL DATA 
BEGIN 

proc:begin 
set out_arg1="Result"; 
end; 

END; 

我檢查 ARGS,並將結果通過 cursor.callproc方法返回

呼叫程序,但沒有數據改變。

任何想法爲什麼會發生這種情況?

在此先感謝。

P.S.我試圖從MySQL控制檯調用此過程,並且一切正常。

+0

您是否嘗試過做cusor.execute調用callproc方法之後( 「SELECT @ out_arg1」)? – Peeyush 2014-11-21 08:47:34

+0

不,我已經通過過程調用(使用pdb)進行調試,'cursor.callproc'實現爲參數生成自定義名稱。 – Akisame 2014-11-21 10:58:03

回答

1

用這種方式

from django.db import connection 
# ... 
cursor = connection.cursor() 
out_arg1 = "" 
args = [in_arg1, in_arg2, out_arg1] 
result = cursor.callproc('some_procedure', args) 

cursor.execute('SELECT @some_procedure_2') 
print(cursor.fetchall()) 

#print(args[2], result[2]) 
cursor.close() 
# ... 
+0

一個小修正 - 變量名稱形成像這樣'_procname_n'。無論如何謝謝你,這種方法應該工作。 – Akisame 2014-11-21 11:17:55