Récupération des résultats d'une procédure stockée à l'aide d'un curseur Python
Cet article aborde le problème de la récupération des résultats d'un appel de procédure stockée MySQL à l'aide d'un Python curseur. Malgré une connexion réussie à la base de données et l'utilisation de curseur.execute() sur une requête SQL normale, les tentatives de récupération des résultats d'un appel de procédure stockée à l'aide de curseur.fetchall() ou curseur.fetchone() renvoient une erreur : "mysql. Connector.errors.InterfaceError : Aucun résultat à récupérer."
Solution
La solution réside dans la récupération l'ensemble de résultats à l'aide de curseur.stored_results(). Cette méthode parcourt tous les ensembles de résultats disponibles, permettant au programmeur de travailler avec l'ensemble de résultats souhaité.
Le code suivant démontre l'approche correcte :
import mysql.connector cnx = mysql.connector.connect(user='root', host='127.0.0.1', database='mytestdb') cnx._open_connection() cursor = cnx.cursor() cursor.callproc("getperson", [1]) for result in cursor.stored_results(): people = result.fetchall() for person in people: print(person) cnx.close()
Ce code récupère avec succès les résultats du fichier stocké. procédure sans rencontrer d'erreurs.
Considération
Il convient de noter que le connecteur MySQL Python peut allouer plusieurs jeux de résultats même en l'absence de plusieurs instructions SELECT. Cette allocation peut se produire en raison de l'inclusion de variables INOUT et OUT dans la procédure stockée, que vous n'avez pas. Néanmoins, l'utilisation de curseur.stored_results() gère efficacement cette allocation potentielle et permet une récupération réussie des résultats.
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!