Phase 03_B
Module ressource⚓
Nous allons placer quelques procédures dans un module ressource nommé TD_03_B_mod.py
Notre fichier principal nommé TD_03_B1.py va appeler des fonctions/procédures du module ressource.
Code du module TD_03_B0_mod.py.⚓
1
# TD_03_B0_mod.py
2
import sqlite3
3
import os
4
import subprocess
5
from unidecode import unidecode
6
import pandas as pd
7
8
def supprimer_db(fichier):
9
"""Supprime le fichier de base de données s'il existe."""
10
if os.path.exists(fichier):
11
os.remove(fichier)
12
print(f"Fichier de base de données '{fichier}' supprimé.")
13
14
def creer_connexion(fichier):
15
"""Crée une connexion à la base de données SQLite."""
16
conn = sqlite3.connect(fichier)
17
return conn
18
19
def lance_dbbrowser(chemin):
20
db_browser_path = r"C:\Program Files (x86)\DB Browser for SQLite\DB Browser for SQLite.exe"
21
#print(db_browser_path)
22
if os.path.exists(db_browser_path) and os.path.exists(chemin):
23
try:
24
subprocess.run([db_browser_path, chemin], check=True)
25
except subprocess.CalledProcessError as e:
26
print(f"Erreur lors de l'exécution : {e}")
27
else:
28
print("L'un des fichiers spécifiés n'existe pas.")
29
30
def genere_feuille_excel_competences(pathXlsx):
31
32
id = [1, 2, 3, 4, 5]
33
name = ['Maintenir', 'Améliorer', 'Installer', 'Manager', 'Sécuriser']
34
code = [unidecode(name[:3]).upper() for name in name]
35
validation = ["Non évalué"] * 5
36
# On génère une structure de données de type data frame constituée de nos listes
37
df = pd.DataFrame({'id': id, 'code': code, 'name': name, 'validation': validation})
38
print(df)
39
# la dataframe pandas est écrite dans la feuille de calcul
40
# index= false a pour rôle de ne pas insérer le colone d'index avec les n° de lignes de la dataframe
41
df.to_excel(pathXlsx, sheet_name="competences", index=False)
42
43
44
def creer_table(conn):
45
"""Crée la table competences dans la base de données."""
46
cur = conn.cursor()
47
cur.execute('''
48
CREATE TABLE IF NOT EXISTS competences (
49
id INTEGER PRIMARY KEY AUTOINCREMENT,
50
code TEXT NOT NULL,
51
name TEXT NOT NULL,
52
validation TEXT NOT NULL
53
)
54
''')
55
cur.close()
56
print("Table 'competences' créée.")
57
58
def inserer_competences(conn, competences_data):
59
"""Insère plusieurs compétences dans la table competences."""
60
cur = conn.cursor()
61
cur.executemany('''
62
INSERT INTO competences (code, name, validation)
63
VALUES (?, ?, ?)
64
''', competences_data)
65
conn.commit()
66
cur.close()
67
print("Compétences insérées avec succès.")
68
Remarque : Explications⚓
La partie 1 est bien sûr optionnelle si on dispose d'un fichier excel existant qu'il n'est pas nécessaire de recréer.
Avec Pandas, on lit le fichier excel (avec la méthode read_excel
) et on remplace le code qui est présent dans la procédure inserer_competence par la méthode to_sql
.
Au final, le détail du code ci-dessous :
- Le code fourni est un script Python conçu pour gérer le flux de travail d'une application qui interagit avec une base de données SQLite et un fichier Excel. Le script commence par importer les modules nécessaires, notamment subprocess, pandas, sqlite3, os et un module personnalisé TD_03_B0_mod as ress.
- La fonction principale est le cœur du script, car elle exécute plusieurs tâches essentielles. Elle commence par définir les chemins d'accès à la base de données SQLite (cheminBDD) et au fichier Excel (cheminExcel). La fonction génère ensuite, de manière optionnelle, un fichier Excel avec un nom spécifique pour faciliter la gestion, en utilisant la fonction genere_feuille_excel_competences du module ress.
- Ensuite, le script lit le fichier Excel pour récupérer les données dans un DataFrame pandas (df). Il spécifie le nom de la feuille « compétences » pour extraire les données pertinentes. Ensuite, le script supprime toute base de données SQLite existante au chemin spécifié à l'aide de la fonction supprimer_db du module ress.
- Le script crée ensuite une nouvelle connexion à la base de données SQLite à l'aide de la fonction creer_connexion. Une fois connecté, il crée une table nommée « compétences » dans la base de données à l'aide de la fonction creer_table. La structure du DataFrame est ensuite écrite dans la table « compétences » de la base de données en une seule opération, en remplaçant toutes les données existantes.
- Après avoir écrit les données, le script ferme la connexion à la base de données pour garantir l'intégrité des données. Enfin, il lance le navigateur de base de données SQLite pour visualiser la base de données à l'aide de la fonction lance_dbbrowser du module ress.
- Le script se termine par une instruction conditionnelle qui vérifie si le script est exécuté en tant que module principal. Si c'est le cas, il appelle la fonction principale pour exécuter le flux de travail. Cette structure garantit que le script peut être importé en tant que module dans d'autres scripts sans exécuter automatiquement la fonction principale.
Complément : Programme prinicipal⚓
1
# TD_03_B1.py
2
import subprocess
3
import pandas as pd
4
import sqlite3
5
import os
6
import TD_03_B0_mod as ress
7
def main():
8
"""
9
Fonction principale pour gérer le flux de l'application.
10
11
Cette fonction effectue les tâches suivantes :
12
1. Définit les chemins vers la base de données SQLite et le fichier Excel.
13
2. Génère un fichier Excel avec le nom du TD pour faciliter la gestion.
14
3. Lit le fichier Excel pour récupérer les données dans un DataFrame pandas.
15
4. Supprime la base de données SQLite existante.
16
5. Crée une nouvelle connexion à la base de données SQLite.
17
6. Crée une table 'competences' dans la base de données.
18
7. Écrit en une seule ligne la structure du DataFrame dans la table 'competences' de la base de données.
19
8. Ferme la connexion à la base de données.
20
9. Lance le navigateur de base de données SQLite pour visualiser la base de données.
21
22
Parameters:
23
None
24
25
Returns:
26
None
27
"""
28
#1 chemins des fichiers
29
cheminBDD ="D:\\SRP\\EDC-01_NOTES\\TD\\test_TD_03_B1.db"
30
cheminExcel="D:\\SRP\\EDC-01_NOTES\\TD\\test_TD_03_B1.xlsx"
31
# 2 : Optionnellement, on crée le fichier excel avec le nom du TD pour plus de confort
32
ress.genere_feuille_excel_competences(cheminExcel)
33
34
# 3 : On relit le fichier excel pour récupérer les données
35
df = pd.read_excel(cheminExcel, sheet_name='competences')
36
37
# 4 : Supprimer la base de données existante
38
ress.supprimer_db(cheminBDD)
39
40
# 5 : Créer une nouvelle connexion à la base de données
41
conn = ress.creer_connexion(cheminBDD)
42
43
# 6 : Créer la table competences
44
ress.creer_table(conn)
45
46
# 7 : on écrit en une seule ligne la structure dataframe dans la table de la base de données
47
df.to_sql('competences', conn, if_exists='replace', index=False)
48
49
# 8 : Fermeture de la connexion
50
conn.close()
51
# 9 : Lance le navigateur de base de données SQLite pour visualiser la base de données.
52
ress.lance_dbbrowser(cheminBDD)
53
54
55
# Exécuter le script
56
if __name__ == "__main__":
57
main()