Maison >base de données >tutoriel mysql >Pourquoi ma requête MySQLdb SELECT ... WHERE ... IN ... ne renvoie-t-elle pas les résultats ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 13:06:30928parcourir

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>

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>

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