Maison  >  Article  >  base de données  >  Comment corriger l'erreur « Commandes non synchronisées » dans Python lors de l'utilisation de procédures stockées MySQL ?

Comment corriger l'erreur « Commandes non synchronisées » dans Python lors de l'utilisation de procédures stockées MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-22 11:25:11297parcourir

How to Fix the

Résolution de l'erreur « Commandes désynchronisées » en Python lors de l'interface avec des procédures stockées dans MySQL

En Python, lors de l'utilisation de Django pour exécuter des procédures stockées procédures dans MySQL, une erreur courante rencontrée est "commandes désynchronisées ; vous ne pouvez pas exécuter cette commande maintenant". Cette erreur survient lors de la tentative d'exécution d'une deuxième instruction suite à l'appel de procédure, alors que la transaction est toujours en cours.

Pour résoudre ce problème, il est crucial de fermer le curseur utilisé pour exécuter la procédure et d'en créer un nouveau avant exécuter les instructions suivantes :

cursor.close()

cursor = connection.cursor()

Le curseur peut être fermé immédiatement après avoir récupéré les résultats de l'appel de procédure. Le jeu de résultats n'est pas affecté et est toujours accessible.

Considérons une procédure MySQL simplifiée comme exemple :

delimiter $$
create procedure my_mysql_procedure(p_page_id int)
begin

        select 1
        from dual; 

    end$$
delimiter ;

Dans Python, l'erreur "commandes désynchronisées" se produirait lors d'une tentative d'exécuter une autre instruction après avoir appelé la procédure, comme on le voit dans ce code :

cursor.callproc('my_mysql_procedure', [some_id,]) 
result = cursor.fetchall()
for r in result:
    do something

cursor.execute("select * from some_table")
result = cursor.fetchall()

En fermant et ré-ouvrant le curseur après l'appel de la procédure, l'erreur est éliminée et les instructions suivantes peuvent être exécutées sans problème. Cette solution garantit que MySQL conserve la séquence de commandes correcte et permet une exécution transparente des opérations ultérieures de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn