Interface de programmation

Recherche sélective dans une base de données

Pour ce qui va suivre, nous supposerons que vous avez effectivement importé les données des quatre tables de la base de données Librairie.sq3 comme décrit dans le paragraphe précédent. Le petit script ci-dessous est fourni à titre purement indicatif. Il s’agit d’un client SQL rudimentaire, qui vous permet de vous connecter à la base de données Librairie.sq3 qui devrait à présent exister dans l’un de vos répertoires, d’y ouvrir un curseur et d’utiliser celui-ci pour effectuer des requêtes. Notez encore une fois que rien n’est transcrit sur le disque tant que la méthode commit() n’a pas été invoquée.

api26.jpg

Cette application très simple n’est évidemment qu’un exemple. Il faudrait y ajouter la possibilité de choisir la base de données ainsi que le répertoire de travail. Pour éviter que le script ne se « plante » lorsque l’utilisateur encode une requête incorrecte, nous avons utilisé ici le traitement des exceptions déjà décrit dans un précédent chapitre.

En lançant le script ci-dessus (téléchargeable ici ), il est possible d'interroger la base de données directement à l'aide du langage SQL:

api27.jpg

Le principal désavantage du script que nous avons écrit précédemment pour effectuer des requêtes SQL sur la base données Librairie.sq3 est la manière avec laquelle il stocke les résultats des requêtes. En effet, une fois le script refermé, toutes les requêtes entrées ainsi que leurs résultats respectifs disparaissent. Une amélioration possible serait de créer à chaque requête un fichier HTML récupérant les résultats de celle-ci dans un tableau comme le propose l'exercice suivant.

Exercice 3

Ecrivez un script Python permettant d'effectuer des requêtes SQL sur la base de données Librairie.sq3 et d'enregistrer le résultat de chaque requête dans un nouveau fichier HTML sous la forme d'un tableau dont les lignes représenteront les différents enregistrements répondant aux critères de la requête et les colonnes chacun des champs les composant. Par exemple, la requête suivante

api28.jpg

devra être capable de générer le fichier requete1.html, construit à partir du fichier-modèle template.html et basé sur le style MonStyle.css. Les documents nécessaires au test de l'exercice peuvent être téléchargés ici.

Afin de faciliter votre tâche, écrivez et testez les fonctions suivantes en suivant les indications mises à votre disposition dans chacun des fichiers-squelettes:

  • htmlFile_from_template(templatename, htmlfilename, requete, resultat)
    Cette fonction crée un fichier XHTML à partir du patron de mise en page en y introduisant la ‹requete› ainsi que le code HTML ‹resultat› aux emplacements du code balisés "request", respectivement "result".
  • html_from_sql_result(cursor)
    Cette fonction retourne le code HTML affichant les enregistrements situés dans le curseur sous la forme d'un tableau.
  • Partie principale du programme
    La partie principale du programme récupère la requête transmise par l'utilisateur, l'exécute puis génère le code HTML du tableau fonction retourne le code HTML du tableau affichant les enregistrements résultants. Elle insère finalement la requête et le tableau dans un nouveau fichier HTML basé sur le patron de mise en page template.html.

Testez votre programme en récupérant les informations suivantes dans autant de fichiers HTML différents:

  1. La liste des coordonnées des clients (nom, adresse, ville) fribourgeois et neuchâtelois, ordonnées par canton et par nom.
    (Résultat et solution)
  2. La liste des clients genevois mis en correspondance avec le nombre total d'articles commandés par chacun.
    (Résultat et solution)
  3. La moyenne des prix unitaires des produits cartonnés.
    (Résultat et solution)
  4. La liste de tous les articles commandés par le client Archambault avec pour chacun le nom du livre, son prix unitaire ainsi que le nombre d'articles commandés.
    (Résultat et solution)
  5. La liste des montants totaux de chacune des commandes passées avec pour chacune d'elles le nom du client l'ayant passée.
    (Résultat et solution)
Exercice 4

Réalisez une application graphique Python permettant d'effectuer des requêtes SQL sur la base de données Librairie.sq3 avec affichage momentanée du résultat directement dans l'interface graphique et possibilité de l'enregistrer définitivement sous la forme d'un tableau enregistré dans un fichier HTML externe. Votre application pourra avoir l'allure suivante:

api29.jpg

Editeur graphique SQL

Aidez-vous du fichier de test du programme ainsi que des chapitres traitant des interfaces graphiques et de la programmation orientée objet du cours d'OC3, notamment au travers de l'exemple du train et suivez chacune des étapes suivantes en vous aidant du squelette de code mis à disposition:

  1. L'application graphique sera constituée d'une zone de texte permettant à l'utilisateur d'entrer sa requête SQL ainsi que 3 boutons comme indiqué ci-dessous:
    api30.jpg

    Editeur graphique SQL

    api31.jpg

    Résultat d'une requête

    Le bouton Exécuter permettra de lancer l'exécution de la requête entrée par l'utilisateur et en affichera le résultat dans la console IDLE comme le montre l'illustration ci-dessus; le bouton Effacer permettra d'effacer la précédente requête entrée dans la zone de texte et de réafficher l'invite de départ; le bouton Quitter permettra de fermer le curseur, la connexion à la base de donnée et détruire l'interface graphique.
    (Squelette | Solution)

  2. Les résultats des requêtes seront affichés directement dans un cadre (Frame) situé au-dessous du bouton d'exécution. Afin d'améliorer la lisibilité des enregistrements résultants, ces derniers seront affichés dans des étiquettes (Label) placées horizontalement dans des fenêtres à carreaux (Panedwindow) comme indiqué ci-dessous:
    api32.jpg

    Editeur graphique SQL

    Le cadre réceptionnera la fenêtre à carreaux dont chaque carreau vertical contiendra une nouvelle fenêtre à carreaux horizontaux contenant les valeurs d'attributs pris par l'enregistrement correspondant. Aidez-vous des exemples proposés par les liens proposés ainsi que du squelette ci-dessous.
    (Squelette | Solution)

  3. Les résultats des requêtes affichés dans l'interface graphique utilisateur pourront être sauvegardés dans un fichier HTML externe grâce au nouveau bouton Sauvegarder. Les résultats seront enregistrés sous forme de tableau dans un fichier HTML construit à partir d'un modèle et du feuille de style, comme indiqué ci-dessous:
    api33.jpg

    Editeur graphique SQL

    api34.jpg

    Sauvegarde du résultat

    Aidez-vous de l'exercice précédent que vous pouvez importer comme module ainsi que du squelette ci-dessous.
    (Squelette | Solution)