Python avec MySQL
INSTALLATION DE MYSQL CONNECTOR : 1
CONNEXION A UNE BASE DE DONNEES MYSQL 1
TESTER LE CONNECTEUR MYSQL 1
CREER UNE CONNEXION 1
CREER UNE BASE DE DONNEES AVEC PYTHON 2
AFFICHER TOUTES LES BASES DE DONNEES 2
CREER UNE TABLE MYSQL AVEC PYTHON 2
AFFICHER TOUTES LES TABLES DE LA BASE DE DONNEES 3
CLE PRIMAIRE 3
INSERER DES DONNEES DANS UNE TABLE MYSQL AVEC PYTHON 4
INSERER PLUSIEURS LIGNES 5
SELECTIONNER DES DONNEES AVEC PYTHON – MYSQL 6
LA METHODE FETCHONE() 7
MISE A JOUR DE DONNEES AVEC PYTHON – MYSQL 7
EMPECHER L’INJECTION SQL 8
TRIER LES DONNEES AVEC PYTHON – MYSQL 9
ORDER BY DESC 10
LA CLAUSE WHERE MYSQL AVEC PYTHON 11
Pr. Hakim EL MASSARI
EMPECHER L’INJECTION SQL 11
LA CLAUSE LIMIT MYSQL AVEC PYTHON 12
SUPPRIMER DES DONNEES EN MYSQL AVEC PYTHON 13
EMPECHER L’INJECTION SQL 14
SUPPRIMER UNE TABLE D’UNE BD AVEC PYTHON – MYSQL 15
SUPPRIMER UNIQUEMENT SI LA TABLE EXISTE 16
Pr. Hakim EL MASSARI
Pour vous connecter à un serveur MySQL à partir de Python, vous avez besoin d’un
pilote de base de données.
N.B : « MySQL Connector » est le pilote officiel pris en charge par Oracle pour se
connecter à MySQL via Python.
Installation de MySQL Connector :
À l’aide de la commande pip, vous pouvez installer MySQL Connector sur n’importe
quelle plate-forme de système d’exploitation, y compris Windows, macOS, et Linux.
Utilisez la commande pip suivante pour installer MySQL Connector.
> python -m pip install mysql-connector-python
Connexion à une base de données MySQL
Tester le connecteur MySQL
Pour tester si l’installation a réussi, ou si vous avez déjà « MySQL Connector »
installé, créez un script Python nommé « test.py » contenant la ligne suivante :
import mysql.connector
Si le code ci-dessus a été exécuté sans erreur, alors « MySQL Connector » est
installé et prêt à être utilisé.
Créer une connexion
Commencez par créer une connexion à la base de données. Utilisez le nom
d’utilisateur et le mot de passe de votre base de données MySQL:
import mysql.connector
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = ""
)
print(db)
Sortie:
<mysql.connector.connection_cext.CMySQLConnection object at
0x0000026E5C7E7B60>
1
Pr. Hakim EL MASSARI
Vous pouvez maintenant commencer à interroger la base de données à l’aide des
instructions SQL.
Créer une base de données avec Python
L’exemple suivant crée une base de données nommée « my_db »:
import mysql.connector
#connexion à la base de données
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = ""
)
#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("CREATE DATABASE my_db")
Si le code ci-dessus a été exécuté sans erreur, vous avez réussi à créer une base
de données.
Afficher toutes les bases de données
cur.execute("SHOW DATABASES")
for db in cur:
print(db)
Créer une table MySQL avec Python
L’exemple suivant crée une table nommée « person » dans la base de données «
my_db »:
import mysql.connector
#connexion au base de données
2
Pr. Hakim EL MASSARI
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("CREATE TABLE person (name VARCHAR(255), age
INT)")
Afficher toutes les tables de la base de données
cur.execute("SHOW TABLES")
for table in cur:
print(table)
Clé primaire
Lors de la création d’une table, vous devez également créer une colonne avec une
clé unique pour chaque enregistrement. Cela peut être fait en définissant une clé
primaire.
Nous utilisons l’instruction INT AUTO_INCREMENT PRIMARY KEY qui insérera un
numéro unique pour chaque enregistrement. À partir de 1 et s’incrémente de 1 pour
chaque enregistrement.
L’exemple suivant crée la clé primaire lors de la création de la table :
import mysql.connector
#connexion au base de données
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = "",
database = "my_db"
3
Pr. Hakim EL MASSARI
)
#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("CREATE TABLE person (id INT AUTO_INCREMENT
PRIMARY KEY, name VARCHAR(255), age INT)")
Insérer des données dans une table MySQL avec Python
L’exemple suivant insère un enregistrement dans la table « person » de la base de
données « my_db »:
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()
#requéte SQL
sql = "INSERT INTO person (name, age) VALUES (%s, %s)"
#les valeurs de la requéte SQL
value = ("Karim", 18)
#exécuter le curseur avec la méthode execute() et transmis la
requéte SQL
cur.execute(sql, value)
#valider la transaction
db.commit()
4
Pr. Hakim EL MASSARI
#afficher le nombre de lignes insérées
print(cur.rowcount, "ligne insérée.")
Insérer plusieurs lignes
Pour insérer plusieurs lignes dans une table, utilisez la méthode executemany().
L’exemple suivant insérer plusieurs lignes dans la table « person » de la base de
données « my_db »:
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()
#requéte SQL
sql = "INSERT INTO person (name, age) VALUES (%s, %s)"
#les valeurs de la requéte SQL
value = [
('Taha', 19),
('Ahmed', 21),
('Sara', 55),
('Kamal', 25),
('Farah', 17),
('Mohamed', 15),
('Ali', 12)
]
#exécuter le curseur avec la méthode executemany() et transmis
la requéte SQL
5
Pr. Hakim EL MASSARI
cur.executemany(sql, value)
#valider la transaction
db.commit()
#afficher le nombre de lignes insérées
print(cur.rowcount, "lignes insérées.")
Sélectionner des données avec Python – MySQL
L’exemple suivant sélectionne tous les enregistrements de la table « person » et
affiche le résultat :
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")
#récupèrer toutes les lignes de la dernière instruction
exécutée.
res = cur.fetchall()
for line in res:
print(line)
6
Pr. Hakim EL MASSARI
La méthode fetchone()
Si vous n’êtes intéressé que par une seule ligne, vous pouvez utiliser la méthode
fetchone().
La méthode fetchone() renverra la première ligne du résultat. L’exemple suivant
récupère une seule ligne :
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")
#récupèrer la 1ére ligne de la dernière instruction exécutée.
res = cur.fetchone()
print(res)
Mise à jour de données avec Python – MySQL
L’instruction UPDATE modifie les données existantes dans une table.
Exemple :
L’exemple suivant modifie la colonne « name » de la table « person » de ‘Mohamed’
à ‘Mohammed’
import mysql.connector
#connexion au base de données
7
Pr. Hakim EL MASSARI
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 = "UPDATE person SET name = 'Mohammed' WHERE name =
'Mohamed'"
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql)
#valider la transaction
db.commit()
#afficher le nombre de lignes modifiées
print(cur.rowcount, " lignes modifiées")
Empêcher l’injection SQL
Lorsque les 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 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 :
import mysql.connector
#connexion au base de données
db = mysql.connector.connect(
host = "localhost",
user = "root",
password = "",
8
Pr. Hakim EL MASSARI
database = "my_db"
)
#créer un curseur de base de données pour effectuer des
opérations SQL
cur = db.cursor()
sql = "UPDATE person SET name = %s WHERE name = %s"
value = ("Alexander", "Alex")
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql, value)
#valider la transaction
db.commit()
#afficher le nombre de lignes modifiées
print(cur.rowcount, " lignes modifiées")
Trier les données avec Python – MySQL
Utilisez l’instruction ORDER BY pour trier le résultat par ordre croissant ou
décroissant.
Le mot clé ORDER BY trie le résultat par ordre croissant par défaut. Pour trier le
résultat par ordre décroissant, utilisez le mot clé DESC.
L’exemple suivant trie le résultat par ordre croissant de l’âge.
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
9
Pr. Hakim EL MASSARI
cur = db.cursor()
sql = "SELECT * FROM person ORDER BY age"
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql)
#récupèrer la 1ére ligne de la dernière instruction exécutée.
res = cur.fetchall()
for line in res:
print(line)
ORDER BY DESC
Utilisez le mot clé DESC pour trier le résultat dans un ordre décroissant. L’exemple
suivant trie le résultat par ordre décroissant de l’âge.
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 ORDER BY age DESC"
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql)
#récupèrer la 1ére ligne de la dernière instruction exécutée.
res = cur.fetchall()
for line in res:
10
Pr. Hakim EL MASSARI
print(line)
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’âge est supérieur à 20:
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)
Empêcher l’injection SQL
Lorsque des valeurs de requête sont fournies par l’utilisateur, vous devez échapper
les valeurs.
Dans l’exemple suivant nous allons échapper les valeurs de requête à l’aide de
l’opérateur %s :
import mysql.connector
11
Pr. Hakim EL MASSARI
#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)
La clause Limit MySQL avec Python
Le mot clé Limit est utilisée dans l’instruction SELECT pour limiter le nombre de
lignes renvoyées par une requête. Il peut être utilisé conjointement avec SELECT,
UPDATE OU DELETE.
L’exemple suivant sélectionne les 3 premiers enregistrements dans la table « person
»:
import mysql.connector
#connexion au base de données
db = mysql.connector.connect(
host = "localhost",
user = "root",
12
Pr. Hakim EL MASSARI
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 LIMIT 3")
#récupèrer toutes les lignes de la dernière instruction
exécutée.
res = cur.fetchall()
for line in res:
print(line)
Supprimer des données en MySQL avec Python
La commande DELETE est utilisée pour supprimer les lignes qui ne sont plus
nécessaires dans une table de base de données. Il supprime la ligne entière de la
table.
La requête DELETE dans MySQL peut supprimer plusieurs lignes d’une table dans
une seule requête. Cela présente un avantage lors de la suppression d’un grand
nombre de lignes d’une table de base de données.
N.B : Une fois qu’une ligne a été supprimée, elle ne peut pas être récupérée. Il est
donc fortement recommandé d’effectuer des sauvegardes de base de données
avant de supprimer toutes les données de la base de données. Cela peut vous
permettre de restaurer la base de données et d’afficher les données ultérieurement
si nécessaire.
L’exemple suivant supprime toute personne dont l’âge est inférieur à 18 :
import mysql.connector
#connexion au base de données
db = mysql.connector.connect(
host = "localhost",
user = "root",
13
Pr. Hakim EL MASSARI
password = "",
database = "my_db"
)
#créer un curseur de base de données pour effectuer des
opérations SQL
cur = db.cursor()
sql = "DELETE FROM person WHERE age < 18"
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql)
#valider la transaction
db.commit()
#afficher le nombre de lignes supprimées
print(cur.rowcount, " lignes supprimées")
Empêcher l’injection SQL
Dans l’exemple suivant nous allons échapper les valeurs de requête à l’aide de
l’opérateur %s:
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 = "DELETE FROM person WHERE age < %s"
age = ("18", )
14
Pr. Hakim EL MASSARI
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql, age)
#valider la transaction
db.commit()
#afficher le nombre de lignes supprimées
print(cur.rowcount, "lignes supprimées")
Supprimer une table d’une BD avec Python – MySQL
Pour supprimer des tables existantes, vous utilisez l’instruction MySQL DROP
TABLE.
L’instruction DROP TABLE supprime définitivement une table et ses données de la
base de données. Vous pouvez également supprimer plusieurs tables à l’aide d’une
seule instruction DROP TABLE, chaque table est séparée par une virgule (,).
L’exemple suivant supprime la table « person »:
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 = "DROP TABLE person"
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql)
15
Pr. Hakim EL MASSARI
Supprimer uniquement si la table existe
Si la table que vous souhaitez supprimer est déjà supprimée ou pour toute autre
raison n’existe pas, vous pouvez utiliser le mot clé IF EXISTS pour éviter d’obtenir
une erreur.
L’exemple suivant supprime la table « person » seulement s’il existe :
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 = "DROP TABLE IF EXISTS person"
#exécuter le curseur avec la méthode execute() et transmis la
requête SQL
cur.execute(sql)
16
Pr. Hakim EL MASSARI