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