Accès à une base de données
Niveau : intermédiaire
Objectifs : interfacer une application PyQt/Qt Widgets avec une base de données
relationnelle
Prérequis : Programmer par modèle-vue
Jusqu'ici, la persistance des données de BiblioApp a été faite sur fichier en utilisant le
format JSON. Si cette solution simple convient à certaines applications, elle comporte
certaines limitations : le fichier doit être lu et écrit en entier, même si on a juste fait une
minuscule modification comme corriger le nom d'un auteur ; on doit charger en
mémoire vive toutes les données ; l'application est mono-utilisateur en ce qui concerne
les mises à jour (même si le fichier est sur un disque partagé, le dernier utilisateur qui
écrit le fichier écrase les modifications éventuelles faites par un autre utilisateur), etc.
Par ailleurs, il y a une redondance des données : les informations "auteur", "éditeur" et
"genre" sont recopiées dans chaque livre. En ayant une structure de données plus
intelligente, on pourrait certainement factoriser ces informations et avoir juste des
références au niveau de chaque livre ; ainsi, si le nom d'un éditeur doit être changé, il
suffit de faire une correction localisée plutôt qu'avoir à éditer tous les livres de cet
éditeur ; on pourrait par ailleurs avoir à ajouter des informations sur chaque éditeur
(adresse, e-mail, etc.) qu'il serait absurde d'avoir à répliquer au niveau de chaque
livre. Pour toutes ces raisons, il est clair que le mode de stockage sur fichier tel
qu'exposé au chapitre Développer avec Qt Designer ne convient bien que pour la
gestion d'une petite collection personnelle ; il est inadapté pour une bibliothèque
municipale ou nationale.
Pour pallier ces limitations, la solution par excellence consiste à utiliser une base de
données. Il existe plusieurs types de bases de données ; nous nous pencherons dans ce
chapitre sur le type sans doute le plus répandu, les bases de données relationnelles.
Nous allons montrer comment l'application BiblioApp développée précédemment peut
être adaptée pour stocker ses données dans une base de données relationnelle. Comme
le sujet est très vaste, nous nous limiterons aux concepts de base et leur incarnation
dans PyQt.
Note > Nous considérons dans ce qui suit que vous avez quelques notions du SQL. Si
ce n'est pas le cas, reportez-vous à la Section 1, Deux mots sur SQL.
159
Niveau : intermédiaire
Objectifs : interfacer une application PyQt/Qt Widgets avec une base de données
relationnelle
Prérequis : Programmer par modèle-vue
Jusqu'ici, la persistance des données de BiblioApp a été faite sur fichier en utilisant le
format JSON. Si cette solution simple convient à certaines applications, elle comporte
certaines limitations : le fichier doit être lu et écrit en entier, même si on a juste fait une
minuscule modification comme corriger le nom d'un auteur ; on doit charger en
mémoire vive toutes les données ; l'application est mono-utilisateur en ce qui concerne
les mises à jour (même si le fichier est sur un disque partagé, le dernier utilisateur qui
écrit le fichier écrase les modifications éventuelles faites par un autre utilisateur), etc.
Par ailleurs, il y a une redondance des données : les informations "auteur", "éditeur" et
"genre" sont recopiées dans chaque livre. En ayant une structure de données plus
intelligente, on pourrait certainement factoriser ces informations et avoir juste des
références au niveau de chaque livre ; ainsi, si le nom d'un éditeur doit être changé, il
suffit de faire une correction localisée plutôt qu'avoir à éditer tous les livres de cet
éditeur ; on pourrait par ailleurs avoir à ajouter des informations sur chaque éditeur
(adresse, e-mail, etc.) qu'il serait absurde d'avoir à répliquer au niveau de chaque
livre. Pour toutes ces raisons, il est clair que le mode de stockage sur fichier tel
qu'exposé au chapitre Développer avec Qt Designer ne convient bien que pour la
gestion d'une petite collection personnelle ; il est inadapté pour une bibliothèque
municipale ou nationale.
Pour pallier ces limitations, la solution par excellence consiste à utiliser une base de
données. Il existe plusieurs types de bases de données ; nous nous pencherons dans ce
chapitre sur le type sans doute le plus répandu, les bases de données relationnelles.
Nous allons montrer comment l'application BiblioApp développée précédemment peut
être adaptée pour stocker ses données dans une base de données relationnelle. Comme
le sujet est très vaste, nous nous limiterons aux concepts de base et leur incarnation
dans PyQt.
Note > Nous considérons dans ce qui suit que vous avez quelques notions du SQL. Si
ce n'est pas le cas, reportez-vous à la Section 1, Deux mots sur SQL.
159
