2016-04-20 75 views
2

我有以下代碼:輸出參數不填充

conn = pymssql.connect(server, user, password, database) 
cursor = conn.cursor() 

id_new_field = pymssql.output(int) 

res = cursor.callproc('NewField', ('Test',id_new_field)) 
conn.commit() 
conn.close() 

print(id_new_field.value) 
print(res) 

不幸的是我的輸出參數不填充該字段的id,雖然存儲的過程正確執行。輸出總是'無'。

我認爲問題是,在我的例子中autocommit ist設置爲false,我是對嗎?

但是,因爲當一個事務(這是一個供應商的SP,我不能改變SP)內不執行它的存儲過程引發錯誤我無法設置自動提交爲true。

因此,我現在的工作是使用.execute()而不是.callproc()並將原始sql寫入我的python腳本。這太可怕了。 ;)

是否有機會使用.callproc()自動提交=假?

或者我必須做到完全不同嗎?

回答

0

我也得到了None當我做

print(id_new_field.value) 

但我可以簡單地進行索引res元組檢索值:

print(res[1]) 

(測試使用Python 2.7.11和pymssql 2.1.1。)

+0

不適合我。我正在使用Python 3.5.1和pymssql 2.1.2。準確地說:它只工作一次。我也用'print(res)'試了一下。我第一次得到新字段的ID,但是當我第二次運行腳本時,結果是「無」。 – st4rbuck

+0

您正在運行的存儲過程必須有一些特別的東西。一般問題的答案*「是否有機會使用.callproc()和autocommit = false?」*是「是」。您沒有向我們展示您用作解決方法的SQL代碼,因此我們無法知道您的Python代碼可以做些什麼來獲得相同的結果。 –

+0

@ stefan2342xx - 僅供參考,它也適用於Python 3.5.1和pymssql 2.1.2,即使我在同一個腳本中兩次調用了SP,但兩者之間沒有'.commit()'。無論你的問題是什麼,它看起來不像自動提交是罪魁禍首。 –

0

我發現了這個bug。它坐在電腦前...