Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    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.

  2. #2
    Expert Confirmé Sénior
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 291
    Points : 4 130
    Points
    4 130

    Par défaut

    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

  3. #3
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •