Consultation d'une BDD en Python
Module à installer
🐍 Script Python
pip install mysql.connector
Exemple d'interogation d'une base de données en Python
🐍 Script Python
import mysql.connector
from mysql.connector import errorcode
# Caractéristiques de la connection
database = 'villes'
host_ip = 'localhost'
utilisateur = 'prenom'
password = 'prenom'
#####################
# CONNECTION à la BDD
#####################
try:
conn = mysql.connector.connect(
user = utilisateur,
password = password,
host = host_ip,
database = database)
#################################
# la connection à la BDD a échoué
#################################
except mysql.connector.Error as err:
# Si Erreur de nom d'utilisateur ou de mot de passe
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Votre nom d'utilisateur ou votre mot de passe ne correspond pas !")
# Si Erreur de nom de base de données
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("La base de données",database,"n'existe pas")
# Si autre Erreur
else:
print(err)
#################################
# La connection à la BDD a réussi
#################################
else:
print("vous êtes connecté à la base", conn._database)
##################################################################
# On créé un curseur MySQL qui contient le résultat de la requête
##################################################################
curseur = conn.cursor(buffered=True)
###################################
# REQUETE SQL : Sélection méthode 1
###################################
requete=("SELECT ville_nom, ville_code_postal FROM villes_france_free;") # Requête SQL
resultat = curseur.execute(requete) # Execution de la requete
# On lit toutes les lignes de 'resultat' pour les affecter à 'table'
table = curseur.fetchall()
print(table) # résultat : liste de tuples
# Après la lecture des entrées du résultat de la requête avec
# 'curseur.fetchall()', 'curseur' est vidé.
print()
###################################
# REQUETE SQL : Sélection méthode 2
###################################
requete=("SELECT ville_nom, ville_code_postal FROM villes_france_free WHERE ville_nom='Auray';")
resultat = curseur.execute(requete)
for (nom_de_ville, le_cp) in curseur:
print("nom :", nom_de_ville, "/ code postal :", le_cp)
# le tuple de la boucle for (ici '(nnom_de_ville, le_cp)') doit contenir autant d'éléments
# que d'éléments dans la requête ('ville_nom, ville_code_postal')
#######################################
# REQUETE SQL : Modification de données
#######################################
requete=("UPDATE villes_france_free SET ville_population_2012='"+ input("Nouveau Population :")+"' WHERE ville_nom='Auray';")
resultat = curseur.execute(requete)
conn.commit() # Les modifications sont appliquées dans la BDD
# 'commit()' est nécessaire pour les requêtes de modification
curseur.close() # fermeture du curseur
conn.close() # fermeture du connection
Exercice
1. Recopier le code ci-dessus et le tester (pensez à modifier les informations de connexion au serveur)
2. Ecrire une requête permettant de récupérer le nombre de villes par département.
pour cela il faut utiliser SELECT, JOIN, COUNT, GROUP BY
résultat attendu :
🐍 Script Python
[(419, 'Ain'), (1176, 'Aisne'), (320, 'Allier'), (200, 'Alpes-de-Haute-Provence'), (163, 'Alpes-Maritimes'), (339, 'Ardèche'), (463, 'Ardennes'), (332, 'Ariège'), (433, 'Aube'), (438, 'Aude'), (304, 'Aveyron'), (377, 'Bas-Rhin'), (119, 'Bouches-du-Rhône'), (706, 'Calvados'), (260, 'Cantal'), (404, 'Charente'), (472, 'Charente-Maritime'), (290, 'Cher'), (286, 'Corrèze'), (373, "Côte-d'or"), (260, "Côtes-d'armor"), (557, 'Creuse'), (782, 'Deux-Sèvres'), (594, 'Dordogne'), (369, 'Doubs'), (675, 'Drôme'), (36, 'Essonne'), (403, 'Eure'), (283, 'Eure-et-Loir'), (353, 'Finistère'), (589, 'Gard'), (542, 'Gers'), (343, 'Gironde'), (293, 'Haut-Rhin'), (706, 'Haute-corse'), (463, 'Haute-Garonne'), (221, 'Haute-Loire'), (261, 'Haute-Marne'), (573, 'Haute-Saône'), (1, 'Haute-Savoie'), (515, 'Haute-Vienne'), (177, 'Hautes-Alpes'), (226, 'Hautes-Pyrénées'), (40, 'Hauts-de-Seine'), (353, 'Hérault'), (247, 'Ile-et-Vilaine'), (277, 'Indre'), (533, 'Indre-et-Loire'), (544, 'Isère'), (331, 'Jura'), (291, 'Landes'), (327, 'Loir-et-Cher'), (260, 'Loire'), (334, 'Loire-Atlantique'), (340, 'Loiret'), (319, 'Lot'), (185, 'Lot-et-Garonne'), (363, 'Lozère'), (601, 'Maine-et-Loire'), (620, 'Manche'), (433, 'Marne'), (594, 'Mayenne'), (500, 'Meurthe-et-Moselle'), (261, 'Meuse'), (730, 'Morbihan'), (312, 'Moselle'), (650, 'Nièvre'), (693, 'Nord'), (505, 'Oise'), (895, 'Orne'), (745, 'Paris'), (470, 'Pas-de-Calais'), (547, 'Puy-de-Dôme'), (474, 'Pyrénées-Atlantiques'), (527, 'Pyrénées-Orientales'), (545, 'Rhône'), (375, 'Saône-et-Loire'), (305, 'Sarthe'), (294, 'Savoie'), (262, 'Seine-et-Marne'), (514, 'Seine-Maritime'), (47, 'Seine-Saint-Denis'), (323, 'Somme'), (195, 'Tarn'), (153, 'Tarn-et-Garonne'), (196, 'Territoire de Belfort'), (185, 'Val-de-Marne'), (151, 'Var'), (282, 'Vaucluse'), (281, 'Vendée'), (201, 'Vienne'), (455, 'Vosges'), (102, 'Yonne'), (305, 'Yvelines')]
Solution
SQL
SELECT count(*), departement_nom
FROM villes_france_free JOIN departement
ON villes_france_free.ville_departement = departement.departement_id
GROUP BY departement_nom
3. Exploiter ces données pour construire un diagramme circulaire présentant la répartition des communes par département.
Utiliser la bibliothèque 'matplotlib'
résultat attendu :
4. Ecrire un programme permettant le fonctionnement illustré ci-dessous.
Text Only
Saisir le nom d'une ville : AURAY
Auray est sitée dans le département du Morbihan.
Solution
Text Only