Python カーソルを使用した MySQL ストアド プロシージャの呼び出し
Python アプリケーションで MySQL ストアド プロシージャを利用する場合、結果の取得を適切に処理することが重要です。単純そうに見えますが、プロシージャから結果を取得すると、予期しないエラーが発生する可能性があります。
一般的な課題は、cursor.fetchall() の使用時に「フェッチする結果セットがありません」という例外が発生することです。これは、ストアド プロシージャが複数の結果セットを返すことが多く、cursor.fetchall() が 1 つのセットのみを反復処理するように設計されているために発生します。
この問題を解決するには、対象の特定の結果セットを取得する必要があります。これは、結果セットのジェネレーターを返すcursor.stored_results() メソッドを使用して実行できます。各結果セットは、fetchall() を使用して個別にフェッチできます。
for result in cursor.stored_results(): people = result.fetchall()
特定のシナリオでは、cursor.execute() の使用時に「複数のクエリを含むステートメントには cmd_query_iter を使用してください」というエラーが発生する場合もあります。これは、コネクタがプロシージャ呼び出しを複数のクエリ ステートメントとして誤って解釈するために発生します。
この問題を修正するには、複数のクエリを実行するときに multi=True パラメータを明示的に設定することをお勧めします。これにより、コネクタがそのようなシナリオを正しく処理できるようになります。
cursor.execute("call getperson(1)", multi=True)
これらのガイドラインに従うことで、ストアド プロシージャから効果的に結果を取得し、必要に応じて複数の結果セットを処理できます。
以上がPython で MySQL ストアド プロシージャから結果を適切に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。