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)

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *