Maison > développement back-end > Tutoriel Python > Pourquoi ma requête SQL paramétrée génère-t-elle une erreur « TypeError : tous les arguments ne sont pas convertis » ?

Pourquoi ma requête SQL paramétrée génère-t-elle une erreur « TypeError : tous les arguments ne sont pas convertis » ?

Linda Hamilton
Libérer: 2024-12-30 15:06:11
original
930 Les gens l'ont consulté

Why Does My Parameterized SQL Query Throw a

TypeError : tous les arguments ne sont pas convertis lors du formatage de la chaîne dans les requêtes SQL paramétrées

Rencontre avec l'erreur "TypeError : tous les arguments ne sont pas convertis lors du formatage de la chaîne "Lors de l'utilisation de chaînes dans une requête SQL paramétrée, c'est un problème courant.

L'exemple de code fourni :

cur.execute("SELECT * FROM records WHERE email LIKE '%s'", search)
Copier après la connexion

tente d'exécuter une requête avec une chaîne formatée avec un espace réservé (%s) pour le paramètre de recherche. Cependant, cette méthode est incorrecte.

Pour résoudre cette erreur, la bonne façon d'exécuter une requête paramétrée est de fournir les valeurs d'espace réservé sous forme de liste :

cur.execute("SELECT * FROM records WHERE email LIKE %s", [search])
Copier après la connexion

Dans ce cas, [ search] est une liste contenant le seul paramètre de recherche. MySQLdb (et d'autres bibliothèques de bases de données similaires) s'attendent à ce qu'une liste de valeurs soit convertie et formatée. La transmission directe d'une seule valeur entraînera l'erreur.

La raison derrière cela est qu'une requête paramétrée peut contenir plusieurs espaces réservés dans l'instruction SQL, chacun représentant une valeur différente. En fournissant les valeurs sous forme de liste, la bibliothèque de base de données peut parcourir la liste et convertir chaque valeur de manière appropriée.

Par conséquent, lors de l'utilisation d'espaces réservés dans des requêtes SQL paramétrées, il est essentiel de fournir les valeurs sous forme de liste ou de tuple. . Cela garantit que tous les arguments sont correctement convertis et formatés, évitant ainsi l'erreur « Tous les arguments ne sont pas convertis ».

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal