2017-06-22 28 views
0

私は顧客IDにenterを入力したPythonを使用してストアドプロシージャにアクセスしようとしていて、顧客が複数のインスタンスを持つ複数行のテーブルをレンダリングしますレストランでは何が食べられたのか、何時にそれを食べたのか、そして何月に食べたのか。顧客IDは主キーではないため、複数行のテーブルです。 SQL内PythonでMySQLストアドプロシージャを呼び出す - 間違った引数の数のエラー

は、このコマンドで入力する:

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'のいずれかのメソッドを、リンク先のドキュメントで使いたいと思っていますか? –

関連する問題