Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI > PySide et PyQt
PySide et PyQt Forum d'entraide sur PySide et PyQt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/12/2012, 01h32   #1
atkers
Invité de passage
 
Inscription : décembre 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 6
Points : 2
Points : 2
Par défaut Lequel choisir: QtSQL ou Python sqlite3 seul pour appli GUI (pyqt - pyside) pour la BDD

Bonsoir,

Je suis en train de développer ma premier application GUI. J'ai besoin d'employer une base des données mais je ne sais pas si ça sera mieux d'utiliser QtSQL ou sqlite3 de python seul?

Mes modèles de données ne sont pas compliquées. Je n'ai pas vraiment besoin de SQLAlchemy ou une autre ORM.

Je suis assez competent avec Python et SQL mais pas avec experience au niveau de Qt.

Donc ma question:

Qu'est-ce que vous me recommanderiez ?

Merci !

PS. Je serais également content d'apprendre de vos experiences des BDD avec Qt.
atkers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 08h48   #2
tyrtamos
Expert Confirmé
 
Avatar de tyrtamos
 
Inscription : décembre 2007
Messages : 1 798
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 798
Points : 3 112
Points : 3 112
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.
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
Mes recettes python: http://www.jpvweb.com
tyrtamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2012, 21h19   #3
atkers
Invité de passage
 
Inscription : décembre 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 6
Points : 2
Points : 2
Bonsoir tyrtamos,

Je te remercie énormément pour avoir partager tes experiences et ces explications sur le sujet. Ça m'a beaucoup aidé et j'en suis sûr que ça sera également important pour les autres. Peut-être il te faudra créer un blog pour écrire et partager tous sujet par sujet sur Qt et Python. ;-)

Merci !

Citation:
Envoyé par tyrtamos Voir le message
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.
atkers est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h07.


 
 
 
 
Partenaires

Hébergement Web