Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi ma requête MySQLdb SELECT ... WHERE ... IN ... ne renvoie-t-elle pas les résultats ?

Susan Sarandon
Libérer: 2024-11-01 13:06:30
original
918 Les gens l'ont consulté

Why Doesn't My MySQLdb SELECT ... WHERE ... IN ... Query Return Results?

Exécution de "SELECT ... WHERE ... IN ..." à l'aide de MySQLdb

Lors de l'exécution d'une requête SQL avec une clause IN en utilisant MySQLdb, il est important de prêter attention à la façon dont les paramètres de requête sont construits.

Problème

Un utilisateur a rencontré un problème en essayant de sélectionner les aliments où se trouvait la barre ( 'A', 'C') en utilisant Python et MySQLdb. Malgré la requête identique fonctionnant à partir de la ligne de commande mysql, elle n'a renvoyé aucune ligne en Python.

Cause fondamentale

Le problème est survenu parce que MySQLdb a converti l'argument paramétré [' A','C'] à ("'A'","'C'"), ce qui entraînait trop de guillemets autour des valeurs dans la clause IN.

Solution

Pour exécuter correctement la requête, les paramètres de la requête doivent être construits manuellement. Le code Python suivant montre comment y parvenir :

Python 3 :

<code class="python">args = ['A', 'C']
sql = 'SELECT fooid FROM foo WHERE bar IN (%s)'
in_p = ', '.join(list(map(lambda x: '%s', args)))
sql = sql % in_p
cursor.execute(sql, args)</code>
Copier après la connexion

Python 2 :

<code class="python">args = ['A', 'C']
sql = 'SELECT fooid FROM foo WHERE bar IN (%s)'
in_p = ', '.join(map(lambda x: '%s', args))
sql = sql % in_p
cursor.execute(sql, args)</code>
Copier après la connexion

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