Interface de programmation

Interrogation d'une base de données SQLite

À la suite des opérations ci-dessus, un fichier nommé Librairie.sq3 aura été créé à l’emplacement indiqué dans votre machine. Vous pourriez dès lors quitter Python, et même éventuellement éteindre votre ordinateur : les données sont enregistrées. Maintenant, comment faut-il procéder pour y accéder à nouveau ? C’est très simple : il suffit d’utiliser exactement les mêmes instructions :

api12.jpg

L’interrogation de la base s’effectue bien évidemment à l’aide de requêtes SQL, que l’on confie à la méthode execute() du curseur, toujours sous la forme de chaînes de caractères :

api13.jpg

Cette requête demande la sélection de tous les enregistrements de la table Client, qui devront être transférés de la base de données au curseur. Pour visualiser les enregistrements situés dans le curseur, plusieurs méthodes peuvent être utilisées. Ces méthodes peuvent paraître différentes à première vue mais en réalité tirent toutes parti du fait que l'objet-curseur produit par Python est un itérateur, c'est-à-dire un dispositif générateur de séquences pouvant être parcouru comme une liste ou un tuple:

Dans les méthodes de visualisation présentés ci-dessus, l'accès à la valeur d'un champ qui compose un enregistrement se fait alors par indexation:

api17.jpg

Cette manière d'accéder aux valeurs des champs d'un enregistrement présente un défaut majeur: la position de chaque champs d'un enregistrement doit être connue à l'avance. Afin de faciliter cet accès, il serait préférable que chaque objet contenu dans le curseur soit d'un type similaire à un dictionnaire; ceci permettrait en effet l'accès aux valeurs des champs directement à partir de leur nom et non plus à partir de leur position. Ceci est possible grâce à la classe Row du module sqlite3. Un objet de ce type présente un enregistrement sous forme de conteneur associant chaque nom de champ à sa valeur et s'instancie de la manière suivante:

api18.jpg

Il est alors possible d'extraire plusieurs enregistrement de la manière suivante:

api19.jpg

Tant que le curseur reste ouvert, vous pouvez bien entendu ajouter des enregistrements supplémentaires :

api20.jpg

Pour modifier un ou plusieurs enregistrements, vous pouvez faire appel à la clause UPDATE:

api21.jpg

Pour supprimer un ou plusieurs enregistrements, vous pouvez faire appel à la clause DELETE:

api22.jpg

Finalement, notons que, dans un programme concret, les données à enregistrer se présenteront la plupart du temps dans des variables Python. Vous devrez donc construire la chaîne de caractères contenant la requête SQL, en y incluant les valeurs tirées de ces variables. Il est cependant fortement déconseillé de faire appel dans ce but aux techniques ordinaires de formatage des chaînes, car cela peut ouvrir une faille de sécurité dans vos programmes, en y autorisant les intrusions par la méthode de piratage connue sous le nom de SQL injection. Il faut donc plutôt confier le formatage de vos requêtes au module d’interface lui-même. La bonne technique est illustrée ci-après : la chaîne « patron » utilise le point d’interrogation comme balise de conversion, et le formatage proprement dit est pris en charge par la méthode execute() du curseur :

api23.jpg

Dans cet exemple, la chaîne de requête comporte 5 points d’interrogation, qui sont nos balises. Elles seront remplacées par les 5 éléments du tuple ligne à chaque itération de la boucle, le module d’interface avec SQLite se chargeant de traiter chaque variable correctement en fonction de son type.

Exercice 1

Ecrivez un script Python permettant de créer la base de données Librairie.sq3 respectant le modèle relationnel ci-dessous:

../3_SGBD/SQL/images/sql3.jpg

Schéma relationnel de la base de données Librairie

Votre script permettra également de remplir manuellement la table Client sous forme d'invites proposées à l'utilisateur et se terminera en affichant l'ensemble des données enregistrées dans cette table selon le format suivant :

images/api24.jpg

Utilisez le squelette de code mis à votre disposition ici.

|

Exercice 2

Ecrivez un script Python permettant d'insérer des données dans les tables de la base de données Librairie.sq3 précédemment créées à partir des fichiers CSV correspondants: Client.csv, Commande.csv, Produit.csv et LigneCommande.csv. Votre script invitera l'utilisateur à choisir la table à remplir, transférera toutes les données situées dans le fichier CSV correspondant vers la table choisie par l'utilisateur et affichera les enregistrements insérés:

images/api25.jpg

Le nom des fichiers CSV contenant les données à rentrer sera le même que celui de la table associée.

Utilisez le squelette de code mis à votre disposition ici.

|