c'est une manière de s'assurer que l'initialisation de ModeleTableBiblio
fonctionne bien, même avec une base de données sans livres.
La méthode creeDB exécute des requêtes SQL via la classe QSqlQuery pour créer
les tables genres, books et insérer quelques genres littéraires dans la table
correspondante. En fait, cette méthode pourrait être complètement séparée du
programme principal et exécutée lors du déploiement. Les instructions CREATE
TABLE sont appelées DDL (Data Definition Language) et, souvent, elles sont
définies dans des fichiers dédiés et exécutés hors PyQt via une ligne de commande
par un administrateur de base de données.
La méthode litBD va lire les genres littéraires définis dans la table genres. À cette
fin, on crée la requête SQL SELECT dans une instance de QSqlQuery ; on a ajouté
une clause ORDER BY pour être sûr de retrouver les genres dans l'ordre de définition
(ceci se verra sur la liste déroulante).
On va stocker les genres et leurs identificateurs dans un dictionnaire afin de pouvoir
facilement retrouver l'identificateur d'un genre donné. Comme on veut aussi pouvoir
afficher les genres dans la liste déroulante en conservant leur ordre, on utilise un
OrderedDict, importé du module collections (voir au début du listing). Il s'agit
d'un dictionnaire qui conserve l'ordre d'insertion des éléments, à l'inverse du
dictionnaire standard Python.
On retrouve les enregistrements un par un dans une boucle qui avance en invoquant
next() sur cette instance ; next() renvoie true ou false selon qu'il y a encore
des enregistrements à lire ou non. On extrait un élément d'un enregistrement en
appelant la méthode value avec l'indice de l'élément dans la requête, le premier
étant 0. On insère les éléments retrouvés dans le dictionnaire, la clé étant le libellé
du genre (indice 1) et la valeur étant son identificateur (indice 0).
On fait une requête SQL SELECT pour retrouver les livres stockés dans la table
books, la jointure avec la table genre permet d'obtenir directement le genre
littéraire en toutes lettres plutôt que son code d'identification.
Comme on a pris soin d'écrire le SELECT en respectant l'ordre des huit attributs
165
fonctionne bien, même avec une base de données sans livres.
La méthode creeDB exécute des requêtes SQL via la classe QSqlQuery pour créer
les tables genres, books et insérer quelques genres littéraires dans la table
correspondante. En fait, cette méthode pourrait être complètement séparée du
programme principal et exécutée lors du déploiement. Les instructions CREATE
TABLE sont appelées DDL (Data Definition Language) et, souvent, elles sont
définies dans des fichiers dédiés et exécutés hors PyQt via une ligne de commande
par un administrateur de base de données.
La méthode litBD va lire les genres littéraires définis dans la table genres. À cette
fin, on crée la requête SQL SELECT dans une instance de QSqlQuery ; on a ajouté
une clause ORDER BY pour être sûr de retrouver les genres dans l'ordre de définition
(ceci se verra sur la liste déroulante).
On va stocker les genres et leurs identificateurs dans un dictionnaire afin de pouvoir
facilement retrouver l'identificateur d'un genre donné. Comme on veut aussi pouvoir
afficher les genres dans la liste déroulante en conservant leur ordre, on utilise un
OrderedDict, importé du module collections (voir au début du listing). Il s'agit
d'un dictionnaire qui conserve l'ordre d'insertion des éléments, à l'inverse du
dictionnaire standard Python.
On retrouve les enregistrements un par un dans une boucle qui avance en invoquant
next() sur cette instance ; next() renvoie true ou false selon qu'il y a encore
des enregistrements à lire ou non. On extrait un élément d'un enregistrement en
appelant la méthode value avec l'indice de l'élément dans la requête, le premier
étant 0. On insère les éléments retrouvés dans le dictionnaire, la clé étant le libellé
du genre (indice 1) et la valeur étant son identificateur (indice 0).
On fait une requête SQL SELECT pour retrouver les livres stockés dans la table
books, la jointure avec la table genre permet d'obtenir directement le genre
littéraire en toutes lettres plutôt que son code d'identification.
Comme on a pris soin d'écrire le SELECT en respectant l'ordre des huit attributs
165
