2017-06-22 65 views
0

我想使用Python訪問存儲過程,在其中輸入一個客戶ID後,它將呈現一個多行表,其中包含客戶吃過的多個實例在餐館吃飯,吃什麼,吃什麼,吃什麼月份。這是一個多行表,因爲客戶ID不是主鍵。在Python中調用MySQL存儲過程 - 不正確的參數錯誤

在SQL,進入這個命令:

call metrics.GetFoodByCustomerID("115960981") 

將呈現正確的表給我。但是,當我在Python中運行以下函數時,出現錯誤,我輸入了過程的不正確參數。

[enter image description here]

任何想法,我缺少的是什麼?

+0

將來,請不要發佈代碼圖片。請將您的代碼文本複製並粘貼到您的問題中。我想從你的問題中複製一行代碼到我的答案中,但是我不能:我必須手動輸入它。又見https://meta.stackoverflow.com/questions/285551/why-not-to-upload-images-of-code-on-so-when-asking-a-question –

回答

1

documentation for cursor.callproc指出,第二個參數args應該是參數的

序列議事

使用在你行

myCursor.callproc('metrics.GetFoodByCustomerID', ('115960981')) 

你傳遞一個字符串由括號括起來,用於args'115960981'周圍的括號不起作用,特別是它們不會將此值轉換爲1元素序列。但是,在Python中,字符串是序列,因此參數列表被解釋爲由9個單字符字符串組成的序列。錯誤出現是因爲您的存儲過程不需要9個參數。

嘗試

myCursor.callproc('metrics.GetFoodByCustomerID', ('115960981',)) 

這取代了上面的行可能是你所瞄準。請注意尾部逗號,它使括號中的表達式變爲1元組。或者,也可以使用列表:爲了製作1元素列表,您不需要尾隨逗號:

myCursor.callproc('metrics.GetFoodByCustomerID', ['115960981']) 
+0

@ShabinaRayan:我不知道你可以在遊標上調用'stored_results'。該屬性沒有在我鏈接到的文檔頁面中提到,坦率地說,我並不感到驚訝,你會得到這個錯誤。也許你想在我鏈接的文檔中使用'fetchall','fetchone'或'fetchmany'方法之一? –