Maison > base de données > tutoriel mysql > Pourquoi `fetchone()` provoque-t-il « Résultat non lu trouvé » dans le connecteur MySQL de Python, et comment les curseurs tamponnés peuvent-ils le corriger ?

Pourquoi `fetchone()` provoque-t-il « Résultat non lu trouvé » dans le connecteur MySQL de Python, et comment les curseurs tamponnés peuvent-ils le corriger ?

DDD
Libérer: 2024-11-27 10:32:10
original
370 Les gens l'ont consulté

Why Does `fetchone()` Cause

Connecteur Python MySQL : résultat non lu trouvé lors de l'utilisation de fetchone

Cette question concerne un problème rencontré lors de l'insertion de données JSON dans une base de données MySQL à l'aide le connecteur Python MySQL. Lors de l'insertion de détails de niveau supérieur et de la tentative d'associer des informations de niveau inférieur au parent en fonction des coordonnées d'origine et de destination et de l'horodatage, le code échouerait avec l'erreur « Résultat non lu trouvé ».

La requête utilisée pour la recherche pour le numéro d'étape unique pour chaque ensemble de coordonnées et l'horodatage est :

query = ('SELECT leg_no FROM leg_data WHERE travel_mode = %s AND Orig_lat = %s AND Orig_lng = %s AND Dest_lat = %s AND Dest_lng = %s AND time_stamp = %s')
Copier après la connexion

Initialement, une tentative a été faite pour supprimer tout élément non lu résultats :

cursor.execute(query,(leg_travel_mode, leg_Orig_lat, leg_Orig_lng, leg_Dest_lat, leg_Dest_lng))
leg_no = cursor.fetchone()[0]
try:
    cursor.fetchall()
except mysql.connector.errors.InterfaceError as ie:
    if ie.msg == 'No result set to fetch from.':
        pass
    else:
        raise
cursor.execute(query,(leg_travel_mode, leg_Orig_lat, leg_Orig_lng, leg_Dest_lat, leg_Dest_lng, time_stamp))
Copier après la connexion

Cependant, l'erreur a persisté.

Après une enquête plus approfondie, il a été découvert que la solution réside dans la spécification d'un curseur tamponné. L'ajout de buffered=True à la ligne d'initialisation du curseur a résolu le problème :

cursor = cnx.cursor(buffered=True)
Copier après la connexion

Cela garantit que toutes les lignes sont récupérées en arrière-plan, empêchant ainsi l'erreur de se produire.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal