La clause WHERE MySQL avec Python
La clause WHERE vous permet de spécifier une condition de recherche pour les lignes renvoyées par une requête, l’exemple suivant sélectionne les personnes dont l’age est supérieur à 20:
# -*- coding: utf-8 -*- import mysql.connector #connexion au base de données db = mysql.connector.connect( host = "localhost", user = "root", password = "", database = "my_db" ) #créer un curseur de base de données pour effectuer des opérations SQL cur = db.cursor() #exécuter le curseur avec la méthode execute() et transmis la requête SQL cur.execute("SELECT * FROM person WHERE age > 20") #récupèrer toutes les lignes de la dernière instruction exécutée. res = cur.fetchall() for line in res: print(line)
Sortie:
(2, 'Thomas', 21) (4, 'Thomas', 21) (5, 'Bob', 55) (6, 'Alex', 25) (7, 'Emily', 33) (8, 'Nicolas', 40)
Empêcher l’injection SQL
Lorsque des valeurs de requête sont fournies par l’utilisateur, vous devez échapper les valeurs.
Il s’agit d’empêcher les injections SQL, qui est une technique de piratage Web courante pour détruire ou abuser votre base de données.
Le module mysql.connector a des méthodes pour échapper aux valeurs de requête.
Dans l’exemple suivant nous allons échapper les valeurs de requête à l’aide de l’opérateur %s:
# -*- coding: utf-8 -*- import mysql.connector #connexion au base de données db = mysql.connector.connect( host = "localhost", user = "root", password = "", database = "my_db" ) #créer un curseur de base de données pour effectuer des opérations SQL cur = db.cursor() sql = "SELECT * FROM person WHERE age > %s" age = ("20", ) #exécuter le curseur avec la méthode execute() et transmis la requête SQL cur.execute(sql, age) #récupèrer toutes les lignes de la dernière instruction exécutée. res = cur.fetchall() for line in res: print(line)
Sortie:
(2, 'Thomas', 21) (4, 'Thomas', 21) (5, 'Bob', 55) (6, 'Alex', 25) (7, 'Emily', 33) (8, 'Nicolas', 40)