MySQL et Python
• Programme Python : étudiant.
• Base de Données MySQL : Une bibliothèque
immense.
• La connection : Votre carte d'accès à la
bibliothèque. Elle vous ouvre la porte, mais ne
trouve pas les livres.
• Le cursor : Votre bibliothécaire personnel.
Vous lui donnez une demande (requête SQL),
il la traite et vous ramène les résultats.
Connexion au SGBD
• On utilise la fonction connect() du module
[Link].
• Elle prend en paramètres les informations
d'identification.
• Elle renvoie un objet connection si la
connexion réussit.
Code
import [Link]
try:
connection = [Link](
host='localhost', user='mon_user',
password='mon_mot_de_passe',
database='ma_base_de_donnees' )
print("Connexion réussie !")
except [Link] as err:
print(f"Erreur de connexion : {err}")
Créer le Curseur
• Le curseur est créé à partir de l'objet
connection.
• C'est l'intermédiaire qui enverra les
commandes SQL et récupérera les résultats.
# ... (code de connexion précédent) ...
if connection.is_connected():
cursor = [Link]()
print("Curseur créé avec succès.")
…
[Link]()
Lire des Données (SELECT)
• [Link](requete_sql) : Envoie la
requête au serveur.
• [Link]() : Récupère toutes les lignes
de résultats dans une liste de tuples.
# ... (connexion et création du curseur) ...
[Link]("SELECT id, nom FROM utilisateurs")
resultats = [Link]()
print("Liste des utilisateurs :")
for ligne in resultats:
print(f"ID: {ligne[0]}, Nom: {ligne[1]}« )
Écrire des Données (INSERT)
• Même Syntaxe : [Link](requete_sql)
• MAIS ce n'est pas encore permanent !
# ... (connexion et création du curseur) ...
sql_insert = "INSERT INTO utilisateurs (nom, email)
VALUES (%s, %s)"
nouvel_utilisateur = ('Charlie', 'charlie@[Link]')
[Link](sql_insert, nouvel_utilisateur)
print("Utilisateur ajouté au panier...")
# Et maintenant ? On le valide ?
Transaction : commit() et rollback()
• execute() = Mettre dans le panier. C'est
temporaire.
• [Link]() = Payer. L'action devient
permanente et irréversible.
• [Link]() = Abandonner le
panier. Toutes les actions depuis le dernier
commit() sont annulées.
try:
# ... (code d'insertion) ...
[Link](sql_insert, nouvel_utilisateur)
# Tout s'est bien passé, on valide !
[Link]()
print("Utilisateur enregistré avec succès !")
except:
# Une erreur est survenue, on annule tout !
[Link]()
print("Une erreur a eu lieu, l'insertion a été annulée.")
Nettoyer : Fermer les Ressources
• Il est crucial de fermer le curseur puis la
connexion.
• Cela libère de la mémoire sur le serveur
MySQL et dans votre application.
• Le bloc finally est parfait pour cela, car il
s'exécute en cas d’erreur ou non.
try:
connection = [Link](...)
cursor = [Link]()
# ... opérations ...
[Link]()
except Error as e:
if connection: [Link]()
print(e)
finally:
if cursor: [Link]()
if connection and connection.is_connected():
[Link]()
print("Ressources fermées.")
CREATE et READ Avancé
• executemany() : Insérer plusieurs lignes en une seule
fois (plus performant).
• WHERE : Sélectionner des lignes spécifiques.
• dictionary=True : Rendre les résultats plus lisibles en
utilisant des dictionnaires.
# 1. Insertion multiple
sql = "INSERT INTO utilisateurs (nom, email) VALUES
(%s, %s)"
utilisateurs = [(‘Ali', 'd@com'), ('Eve', 'e@[Link]')]
[Link](sql, utilisateurs)
# 2. Lecture avec dictionnaire
cursor = [Link](dictionary=True)
[Link]("SELECT nom, email FROM utilisateurs
WHERE id = %s", (1,))
utilisateur = [Link]()
# Renvoie {'nom': 'Ali', 'email': '...'}
print(utilisateur['email']) # Plus lisible que
utilisateur[1]
UPDATE et DELETE
• Les syntaxes UPDATE ... SET ... WHERE ... et
DELETE FROM ... WHERE ....
# UPDATE : Mettre à jour l'email de l'utilisateur avec l'ID 2
sql_update = "UPDATE utilisateurs SET email = %s WHERE (id
= %s)"
[Link](sql_update, ('[Link]@[Link]', 2))
# DELETE : Supprimer l'utilisateur avec l'ID 3
sql_delete = "DELETE FROM utilisateurs WHERE id = %s"
[Link](sql_delete, (3,))
[Link]()