Académique Documents
Professionnel Documents
Culture Documents
Chap. 5
Les Bases De Données
Partie II : Module SQLITE3 De Python
Introduction :
Les bases de données, par leur complexité et leur grande optimisation, nécessitent des
logiciels dédiés, les SGBD. Il en existe un grand nombre :
des professionnels (puissants et payants) : Oracle, …
des systèmes développés par des organisations à buts non lucratifs (universités), mais
aussi largement utilisés par le monde professionnel : MySQL, SQLite, …
SQLite est actuellement le moteur de base de données le plus distribué au monde, grâce à son
utilisation dans de nombreux logiciels grand public (Firefox, Skype) et dans les bibliothèques
standards de nombreux langages comme PHP ou Python.
I. Créer une base de données avec SQLite :
Pour créer une base de données avec SQLite, rien de plus simple, Nous devons tout d'abord
importer le module sqlite3 (le 3 indiquant la version de sqlite) :
import sqlite3 # nous importons le paquet Python capable d'interagir avec sqlite
Il faut ensuite décider le nom de fichier que vous voulez attribuer à la base de données.
SQLite mémorise toutes les tables d'une base de données dans un seul fichier que vous
pouvez le sauvegarder où vous voulez:
L'objet connexion est désormais en place, et pour pouvoir dialoguer avec la base de données à
l'aide du langage SQL. Il faut mettre en place un autre objet que l'on appelle un curseur. Il
s'agit d'une mémoire intermédiaire, destiné à mémoriser temporairement les données en cours
de traitement, ainsi que les opérations que vous effectuez sur elles, avant leur transfert
définitif vers la base de données.
cur =Bd.cursor ()
AU 2021/2022 1
ISSAT GABES MP2-PC2-T2
Pour chaque colonne, il est également possible de définir des options telles que :
NOT NULL : Garantit qu'une colonne ne peut pas avoir la valeur NULL.
DEFAULT : Fournit une valeur par défaut pour une colonne lorsque rien n'est
spécifié.
UNIQUE: Veiller à ce que toutes les valeurs d'une colonne sont différents.
PRIMARY KEY : portant une ou plieurs colonnes servant à identifier une ligne de la
table de manière unique
FOREIGN KEY : champ qui, dans une table, fait référence à la clé primaire d'une
autre table est appelé clé étrangère. Ainsi sont définies les relations entre les tables.
CHECK: La contrainte CHECK garantit que toutes les valeurs d'une colonne satisfont
certaines conditions
Types de données :
A noter que les types de données ne portent pas les mêmes noms en Python et en SQL ;
Les principaux types de données en SQL sont :
TEXT ou CHAR : enregistre la donnée comme une chaîne de caractères, sans
limite de taille.
INTEGER ou INT : enregistre la donnée comme un entier ;
REAL ou FLOAT : enregistre la donnée comme un réel ;
DATE, TIME : enregistre la donnée comme une date ;
BOOLEAN ou LOGICAL : vrai/faux
Exemple :
Créer la table « Clinique » de notre BD « Gestion_Clinique.db ».
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
AU 2021/2022 2
ISSAT GABES MP2-PC2-T2
Exemple :
Remplir la table « Clinique » de notre BD « Gestion_Clinique.db ».
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
Exemple :
Donner la requête SQL pour ajouter 20 lits aux cliniques ayant une capacité inférieure à 100.
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
AU 2021/2022 3
ISSAT GABES MP2-PC2-T2
A noter : On ne peut pas supprimer directement une colonne, il faut définir une nouvelle
table.
Exemple :
Donner la requête SQL pour ajouter une colonne « adresse_cl » à la table Clinique :
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
Exemple :
Donner la requête SQL pour Supprimer les enregistrements de la table « Service » ayant
comme Num_cl la valeur 10 :
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
Exemple :
Donner la requête SQL pour Supprimer la table « Service » :
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
AU 2021/2022 4
ISSAT GABES MP2-PC2-T2
Attention : à ce stade des opérations, les enregistrements sont dans le tampon du curseur,
mais ils n'ont pas encore été transférés véritablement dans la base de données. Vous pourriez
donc annuler tout. Le transfert dans la basse de données sera déclenché par la
méthode commit () de l'objet connexion :
Bd.commit()
Le curseur peut alors être refermé, de même que la connexion, si le travail est terminé :
cur.close()
Bd.close()
Il est possible d’obtenir l’intégralité de la relation grâce à l’utilisation du joker * à la place des
attributs :
Par exemple, donner la requête SQL pour afficher les numéros et les noms des cliniques :
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
AU 2021/2022 5
ISSAT GABES MP2-PC2-T2
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
Exemples d’opérateurs :
Recherche d’un caractère dans _ Select ….. where nom like ‘t_t_‘
une chaîne Le nom contient un t en 1ère et en 3ème
lettre
Recherche d’un ensemble de % Select ….where nom like ‘d%d’
caractères dans une chaîne
Le nom commence par un d et finit par
un d.
Entre deux valeurs Between … and Select ….Where prix between 5 and 20
Les bornes sont Incluses
Contient (pour une Like Select ……where nom like ‘A%’
chaîne de caractères) Recherche des noms commençant par la
lettre A
Ne contient pas Not LIKe Select ……where nom not like ‘ALI’
Recherche des noms déférents de ‘ALI’
Vérifie l’appartenance ou pas à IN, NOT IN Select ……where nom IN [elt1, elt2,…
une liste de valeurs ]
AU 2021/2022 6
ISSAT GABES MP2-PC2-T2
UNION :
La commande UNION de SQL permet de mettre bout-a-bout les résultats de plusieurs
requêtes utilisant elles-mêmes la commande SELECT. C’est donc une commande qui permet
de concaténer les résultats de 2 requêtes ou plus. Pour l’utiliser il est nécessaire que chacune
des requêtes à concaténer retournes le même nombre de colonnes, avec les mêmes types de
données et dans le même ordre.
Syntaxe :
A savoir : par défaut, les enregistrements exactement identiques ne seront pas répètes dans le
résultat. Pour effectuer une union dans laquelle même les lignes dupliquées sont affichées il
faut plutôt utiliser la commande UNION ALL.
INTERSECTION :
La commande INTERSECT de SQL permet d’obtenir l’intersection des résultats de deux
requêtes. Cette commande permet donc de récupérer les enregistrements communs à deux
requêtes. Cela peut s’avérer utile lorsqu’il faut trouver s’il y a des données similaires sur deux
tables distinctes.
A savoir : pour l’utiliser convenablement il faut que les deux requêtes retournent le même
nombre de colonnes, avec les mêmes types et dans le même ordre.
Syntaxe :
La syntaxe à adopter pour utiliser cette commande est la suivante :
Par exemple, donner les numéros des cliniques qui disposent à la fois des spécialités 300 et
600 » :
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
DIFFERENCE :
La commande EXCEPT s’utilise entre 2 instructions pour récupérer les enregistrements de la
première instruction sans inclure les résultats de la seconde requête. Si un même
enregistrement devait être présent dans les résultats des 2 syntaxes, il ne sera pas présent dans
le résultat final.
AU 2021/2022 7
ISSAT GABES MP2-PC2-T2
JOINTURE :
Avec une base de données complexe, on a souvent besoin de rassembler des données réparties
dans plusieurs tables, typiquement concaténer les enregistrements provenant de deux tables,
table1 et table2, et vérifiant table1.champ1 = table2.champ2 (l’un des deux champ1 ou
champ2 est souvent une clé primaire dans sa table).
Il faut préférer à ce type de requête l’utilisation d’une jointure.
La syntaxe est la suivante :
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
…………………………………………………………………………………………………………..
AU 2021/2022 8
ISSAT GABES MP2-PC2-T2
N.B : Les paramètres d'une fonction d'agrégation sont toujours entourés de parenthèses.
Imaginons la requête suivante:
Cette requête nous retourne toutes les cliniques ayant une capacité égale à 100. Il se peut très
bien que l'utilisateur ne soit pas intéressé dans le détail, mais veuille uniquement connaître le
nombre des cliniques ayant l’attribut nblits égal à 100.
La requête correspondante est:
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
Le résultat de cette requête est une valeur unique indiquant combien de cliniques se trouvent
dans la table avec le champ nblits ayant la valeur 100.
La clause ORDER BY:
L'ordre obtenu dans la réponse d'une requête de sélection a été laissé jusqu'à maintenant au
pur hasard.
L'expression ORDER BY nous permet de définir convenablement l'ordre d'apparition des
enregistrements qui vérifient les critères de sélection de la requête.
Voici la syntaxe:
cur. execute ("SELECT <Nom d'un champ>, <Nom d'un champ>, ... FROM <Nom de la
table> WHERE <Critères de sélection> ORDER BY <Nom d'un champ>[ASC/DESC],
<Nom d'un champ>[ASC/DESC] ")
Par défaut l'ordre de tri est ascendant (ASC), donc vous n'avez pas nécessairement besoin
d'indiquer le mot ASC. Cependant, lorsque vous voulez trier les enregistrements en ordre
descendant, le mot DESC est indispensable.
Exemple :
Afficher toutes les cliniques triées selon leurs noms en ordre descendant.
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
La clause GROUP BY :
La clause GROUP BY <Liste des champs de groupe> intervient sur le résultat d'un
SELECT. En fait, les enregistrements résultant d'une requête de sélection sont groupés, de
façon qu'à l'intérieur de chaque groupe, les valeurs pour la liste des champs de groupe soient
identiques.
AU 2021/2022 9
ISSAT GABES MP2-PC2-T2
Syntaxe:
cur. execute(" SELECT <Liste des champs de groupe> FROM <Nom de la table>
WHERE <Critères de sélection> GROUP BY <Liste de champs de groupe>")
Exemple :
Donner pour chaque ville, la somme de nombre des lits :
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
La clause HAVING :
Sachant que les critères de sélection (WHERE ...) nous permettent d'éliminer un certain
nombre d'enregistrements avant la création des groupes, il serait intéressant de disposer d'une
deuxième possibilité de filtrage, qui s'applique aux groupes eux-mêmes.
La clause HAVING <Critères de sélection des groupes> est uniquement spécifiée en
relation avec un GROUP BY. Une fois les groupes créés, cette clause en élimine certains,
basés sur les critères de sélection des groupes.
Les critères de sélection des groupes portent bien entendu sur la valeur d'une ou de plusieurs
des fonctions d'agrégation calculées pour chaque groupe.
Reprenons l'exemple:
Lorsqu'on veut par exemple uniquement afficher les groupes pour lesquelles le nombre de lits
est supérieur à 100, on utilise la clause HAVING de la façon suivante:
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
……………………………………………………………………………………………………………
AU 2021/2022 10