Envoyé par
tyrtamos
Bonjour,
J'utilise pas mal sqlite3 avec PyQt4. Un de mes programmes a une base de données de plusieurs milliers d'articles et 15 tables avec transactions, contraintes de clé étrangères, triggers, mises à jour et effacements en cascade, tri selon le dictionnaire français (collate), recherche de mots similaires, etc... Ça marche très bien! Même si sqlite3 reste du niveau du SQL92, il est largement assez puissant pour une application liée à un programme (sans accès concurrent).
Pour choisir entre le pilote sqlite3 de Python et QtSql, voilà ma règle: je n'utilise QtSql (et son pilote sqlite3) que quand il y a du graphique! Quand il n'y en a pas, c'est le pilote normal de Python. Ceci à l'intérieur d'une même application: Rien n'empêche d'accèder à la même base de données avec l'un ou l'autre des pilotes. On essaie simplement de ne pas ouvrir la même base au même moment avec les 2 pilotes.
Les 2 raisons de ce choix sont les suivantes:
1- je préfère nettement les fonctionnalités du pilote Python au pilote QtSql pour tout ce qui n'est pas graphique (gestion des transactions en particulier)
2- le pilote sqlite3 de QtSql est toujours plus ancien que celui de Python, et je ne sais pas le mettre à jour (alors que je mets à jour le pilote de Python pour avoir le dernier)
Cependant, rien n'empêche de n'utiliser que le pilote sqlite3 de QtSql!
Au niveau graphique, donc avec QtSql, j'utilise principalement la visualisation des tables avec QTableView (comme avec un tableur). Ceci pour consulter et modifier les données des tables existantes. J'ai aussi un programme de consultation qui permet à des requêtes de type "select" de créer des tables temporaires qui sont immédiatement affichées avec QTableView. Avec ces affichages, je sais trier (multicritères), filtrer et rechercher par différents moyens (expressions régulières, mots qui se ressemblent, ...), copier-coller ou "drag & drop" avec Excel, imprimer dans un fichier .csv, etc...
Un des nombreux avantages de la visualisation par QTableView/QtSql est que les colonnes ayant des contraintes de clés étrangères sont visualisées avec des combobox ne contenant que les valeurs permises. Cependant, quand le nombre de valeurs est très grand, la recherche de la valeur qu'on veut dans le combobox est pénible, parce qu'elle ne porte que sur le 1er caractère. Par exemple s'il y a 20 mots commençant par la même lettre, il faut taper 20 fois le 1er caractère pour accéder au dernier mot. Alors je l'ai remplacé par un autre composant que j'ai créé sur la base d'un QLineEdit avec completion: la recherche porte sur les premiers caractères et on trouve beaucoup plus vite.
Par contre, on fait des choses étonnantes avec le pilote sqlite3 normal de Python. Par exemple, on peut transformer toute la base de données en script SQL et la reconstruire à l'identique en l'exécutant! Cela permet non seulement de faire une vérification d'intégrité référentielle de la base, mais aussi de faire des modifications de structure de la base au delà de ce que sqlite3 permet.
Tout cela pour dire que quand on a des données à gérer avec un programme (sans accès concurent), on peut faire à peu près ce qu'on veut avec sqlite3, en graphique ou pas!
A noter que, cerise sur le gâteau, les programmes PyQt4-QtSql supportent très bien d'être convertis en programme "standalone" par cx_freeze, ce qui permet de les diffuser sans obliger les utilisateurs à installer Python ni PyQt4.
Partager