Django を介して Python で MySQL ストアド プロシージャを操作する場合、コマンドの同期に関連する問題が発生する可能性があります。これは、トランザクション内で複数のステートメントを実行しようとすると、恐ろしい「コマンドが同期していないため、このコマンドを実行できません」というエラーとして現れることがあります。
デフォルトでは、カーソルは複数の実行にわたって状態情報を維持します。ストアド プロシージャを呼び出すと、カーソルはトランザクション内の別の位置に移動します。カーソルの最初の位置から後続の SQL ステートメントを実行しようとすると、エラーが発生します。
この問題を解決するには、カーソルを閉じて、追加のステートメントを実行する前に、再度開いてください。 fetchall() を呼び出した直後に、結果セットに影響を与えることなく、カーソルを閉じることができます。
cursor.close() cursor = connection.cursor()
これにより、カーソルの位置が効果的にリセットされ、次の SQL ステートメントの実行が可能になります。元のカーソル オブジェクトを閉じた後は使用できなくなることに注意することが重要です。
次のコード スニペットを考えてみましょう。
cursor.callproc('my_mysql_procedure', [some_id,]) result = cursor.fetchall() cursor.close() cursor = connection.cursor() cursor.execute("select * from some_table") result = cursor.fetchall()
この場合、 fetchall() の後にcursor.close() を呼び出すと、カーソルの状態がリセットされ、後続のexecute() ステートメントが正常に実行されることが保証されます。
以上がPython MySQL: ストアド プロシージャ呼び出しでの「コマンドが同期していません」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。