Phase 03_A

03A1 : insertion de tuples 1 par 1

1
# TD_03_A1.py
2
import sqlite3
3
import os, subprocess
4
import pandas as pd
5
from unidecode import unidecode
6
7
import sqlite3
8
9
# Chemin du fichier de base de données
10
cheminBDD = 'TD_03_A1.db'
11
12
# Vérifier si le fichier de base de données existe et le supprimer
13
if os.path.exists(cheminBDD):
14
    os.remove(cheminBDD)
15
    print(f"Fichier de base de données '{cheminBDD}' supprimé.")
16
17
# a1 : Connexion à la base de données
18
conn = sqlite3.connect(cheminBDD)
19
20
# a2 : Création d'un curseur
21
cur = conn.cursor()
22
23
# b : Création de la table competences
24
cur.execute('''
25
CREATE TABLE IF NOT EXISTS competences (
26
    id INTEGER PRIMARY KEY AUTOINCREMENT,
27
    code TEXT NOT NULL,
28
    name TEXT NOT NULL,
29
    validation TEXT NOT NULL
30
)
31
''')
32
33
# c1 : Insertion d'un tuple dans la table
34
cur.execute('''
35
INSERT INTO competences (code, name, validation) 
36
VALUES (?, ?, ?)
37
''', ('MAI', 'MAINTENIR', 'NON EVALUE'))
38
39
# Validation des changements
40
conn.commit()
41
# c2 : Insertion d'un autre tuple dans la table
42
cur.execute('''
43
INSERT INTO competences (code, name, validation) 
44
VALUES (?, ?, ?)
45
''', ('AME','AMELIORER','NON EVALUE'))
46
conn.commit()
47
# Fermeture du curseur et de la connexion
48
cur.close()
49
50
# d : vérifier au prélable le chemin permettant d'atteindre DB Browser
51
db_browser_path = r"C:\Program Files (x86)\DB Browser for SQLite\DB Browser for SQLite.exe"
52
print(db_browser_path)
53
if os.path.exists(db_browser_path) and os.path.exists(cheminBDD):
54
    try:
55
        subprocess.run([db_browser_path, cheminBDD], check=True)
56
    except subprocess.CalledProcessError as e:
57
        print(f"Erreur lors de l'exécution : {e}")
58
else:
59
    print("L'un des fichiers spécifiés n'existe pas.")
60
    
61

03A2 : insertion multiple de tuples

1
# c1 : Liste des tuples à insérer
2
competences_data = [
3
    ('MAI', 'MAINTENIR', 'NON EVALUE'),
4
    ('AME', 'AMELIORER', 'NON EVALUE'),
5
    # Ajoutez d'autres tuples si nécessaire
6
]
7
8
# c2 Insertion en une seule opération
9
cur.executemany('''
10
INSERT INTO competences (code, name, validation) 
11
VALUES (?, ?, ?)
12
''', competences_data)

RemarqueSQL intégré dans le code Python

SQL n'est pas à proprement parler un langage, mais un dialecte. Il peut donc être incorporé dans des variables de type chaîne et ses requêtes sont ainsi passées comme paramètres de méthodes/procédures au connecteur python sqlite3. Quand la partie SQL reste indépendante de variables/données python, c'est aussi simple que la création de la base avec CREATE TABLE ..... en mode SQL.

Par contre, si le nom de la table et des champs/attributs se trouvent dans des variables python, la requête devient dynamique, et il faut construire la chaîne complète de la directive SQL. C'est l'intérêt d'utiliser un langage de programmation afin de changer dynamiquement des paramètres de requêtes, comme les commandes d'un client pour site web commercial, la nomenclature des pièces (uniquement les capteurs) d'un équipement, etc ...

On retrouve cette même logique dans la rédaction de page web avec du html qui intègre des scripts en php ou javascript. Ou encore des pages php ou javascript qui incorporent les basiles html dans les traitements effectués par ces langages.

ExemplePHP côté serveur

Ci-dessous, le même cas traité en PHP du côté du serveur.

1
<?php
2
// Création ou connexion à la base de données SQLite
3
$db = new SQLite3('TD_03_A1.db');
4
5
// Création de la table competences
6
$db->exec('
7
CREATE TABLE IF NOT EXISTS competences (
8
    id INTEGER PRIMARY KEY AUTOINCREMENT,
9
    code TEXT NOT NULL,
10
    name TEXT NOT NULL,
11
    validation TEXT NOT NULL
12
)
13
');
14
15
// Insertion d'un tuple dans la table
16
$statment = $db->prepare('INSERT INTO competences (code, name, validation) VALUES (:code, :name, :validation)');
17
18
// Liste des compétences à insérer
19
$competences_data = [
20
    ['MAI', 'MAINTENIR', 'NON EVALUE'],
21
    ['AME', 'AMELIORER', 'NON EVALUE'],
22
];
23
24
// Insertion des tuples dans la table
25
foreach ($competences_data as $competence) {
26
    $statment->bindValue(':code', $competence[0], SQLITE3_TEXT);
27
    $statment->bindValue(':name', $competence[1], SQLITE3_TEXT);
28
    $statment->bindValue(':validation', $competence[2], SQLITE3_TEXT);
29
    $statment->execute();
30
}
31
32
// Fermeture de la connexion à la base de données
33
$db->close();
34
35
echo "Table créée et tuples insérés avec succès.";
36
?>
37

ExempleJavascript côté serveur avec un serveur node.js

Ci-dessous, le même cas traité en javascript du côté du serveur.

1
const sqlite3 = require('sqlite3').verbose();
2
3
// Connexion à la base de données SQLite
4
let db = new sqlite3.Database('TD_03_A1.db', (err) => {
5
    if (err) {
6
        console.error(err.message);
7
    }
8
    console.log('Connecté à la base de données SQlite.');
9
});
10
11
// Fonction pour ajouter une compétence
12
function ajouterCompetence(code, name, validation) {
13
    const sql = 'INSERT INTO competences (code, name, validation) VALUES (?, ?, ?)';
14
    db.run(sql, [code, name, validation], function(err) {
15
        if (err) {
16
            console.error(err.message);
17
        }
18
        console.log(`Compétence ajoutée avec l'ID ${this.lastID}`);
19
    });
20
}
21
22
// Fonction pour modifier une compétence
23
function modifierCompetence(id, newName, newValidation) {
24
    const sql = 'UPDATE competences SET name = ?, validation = ? WHERE id = ?';
25
    db.run(sql, [newName, newValidation, id], function(err) {
26
        if (err) {
27
            console.error(err.message);
28
        }
29
        console.log(`Compétence avec l'ID ${id} modifiée.`);
30
    });
31
}
32
33
// Exemple d'ajout d'une compétence
34
ajouterCompetence('C002', 'NOUVELLE COMPETENCE', 'NON EVALUE');
35
36
// Exemple de modification d'une compétence
37
modifierCompetence(1, 'COMPETENCE MODIFIEE', 'EVALUÉE');
38
39
// Fermeture de la connexion à la base de données
40
db.close((err) => {
41
    if (err) {
42
        console.error(err.message);
43
    }
44
    console.log('Connexion à la base de données fermée.');
45
});
46
47
48