IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

connection QSqlDatabase MySQL


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Décembre 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Décembre 2019
    Messages : 113
    Points : 72
    Points
    72
    Par défaut connection QSqlDatabase MySQL
    Bonjour,
    voilà quelques temps que j'apprends à manipuler les bases de données sous PyQt5.
    j'ai finalement réussi à me dépatouiller de pas mal de choses (merci à vous)! QTableView, delegate etc...

    au cours de mes essais d'apprentissage j'ouvrais les bases de données soit à partir d'un fichier .db enregistré en dur sur mon PC (via sqlite) via le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def create_connection(self):
            self.db = QSqlDatabase.addDatabase("QSQLITE")
            self.db.setDatabaseName("pythonsqlite.db")
            if not self.db.open():
                print("connexion impossible au fichier indiqué")
                return False
            return True
    soit via un serveur sur lequel j'avais accès à une base de données mySQL (import mysql.connector) via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    connection = mysql.connector.connect(user='moi',
                                                         password='1234567890',
                                                         host='XXX.YYY-ZZZZ.fr',
                                                         database='DATAB')
    cursor = connection.cursor()
    les deux modes de connexion ci-dessus fonctionnent mais n'est-il pas possible de se connecter avec un QSqlDatabase sur un serveur?
    j'ai essayé le code ci dessous mais ça ne passe pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    db = QSqlDatabase.addDatabase("QMYSQL")
    db.setHostName("XXX.YYY-ZZZZ.fr") #ici c'est un url que j'indique... faut-il un ip? moyen de le connaitre comment?
    db.setDatabaseName("DATAB")
    db.setUserName("moi")
    db.setPassword("1234567890")
    if not db.open():
        print("connexion impossible")
    c'est quel épisode que j'ai raté? je viens de parcourir la doc QSqlDatabase mais je ne vois pas où il manque quelque chose...
    merci,
    cordialement,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par clement_74 Voir le message
    c'est quel épisode que j'ai raté?
    La récupération du message d'erreur pour avoir des pistes sur ce qui ne se passe pas bien?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par clement_74 Voir le message
    voilà quelques temps que j'apprends à manipuler les bases de données sous PyQt5.
    Avis perso, je n'aime pas. Ca brise le modèle MVC (Modèle/Vue/Controleur). La Vue, c'est faire entrer et faire sortir les données (Qt, ou Tk, ou Gtk, ou print/input ou ...). Le Modèle c'est le stockage des données (fichier, ou bdd, ou cloud, ou...). Et les deux domaines doivent rester bien séparés ce qui permet de les faire évoluer distinctement selon le besoin.
    Pour moi Qt c'est une IHM. Qu'il se mette à faire 10 milliards de trucs en plus ce n'est pas son job et ça devient une usine à gaz. Et celui qui met tout dans Qt se retrouve lié (le jour où il voudra passer sur un autre produit, il sera baisé).
    J'aime beaucoup Qt, mais malgré le fait que je l'apprécie énormément, je considère qu'il doit savoir rester à sa place (ou plutôt je ne le laisse pas prendre une place qui n'est pas la sienne à l'origine). Et donc pour mes bdd (Postgres pour moi) j'utilise des outils "hors Qt" dédié spécifiquement à l'intéraction Python.
    C'est vrai que tout mettre dans Qt ça simplifie les choses mais "celui qui sacrifie sa liberté pour sa sécurité ne mérite ni l'une ni l'autre et perdra les deux" (Benjamin Franklin). Il avait dit ça à l'époque des guerres d'indépendance mais cela reste valable finalement pour toute techno qui devient trop envahissante. Mais c'était un avis perso.

    Citation Envoyé par clement_74 Voir le message
    les deux modes de connexion ci-dessus fonctionnent mais n'est-il pas possible de se connecter avec un QSqlDatabase sur un serveur?
    Si bien sûr. Ici les drivers Qt connus. MySQL y est intégré par défaut.

    Citation Envoyé par clement_74 Voir le message
    j'ai essayé le code ci dessous mais ça ne passe pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    db = QSqlDatabase.addDatabase("QMYSQL")
    db.setHostName("XXX.YYY-ZZZZ.fr") #ici c'est un url que j'indique... faut-il un ip? moyen de le connaitre comment?
    db.setDatabaseName("DATAB")
    db.setUserName("moi")
    db.setPassword("1234567890")
    if not db.open():
        print("connexion impossible")
    c'est quel épisode que j'ai raté?
    A priori rien. Tous les exemples que je regarde font comme toi
    Donc revenir aux fondamentaux: une action, tu printes ensuite le résultat voir s'il est ok. Sans oublier le tout premier test incontournable, à savoir taper depuis ton terminal la commande mysql --host=XXX.YYY-ZZZZ.fr --user=moi --password=1234567890 DATAB voir si déjà tu arrives à te connecter à ta bdd.

    Et pour tes questions annexes, pour la première "faut-il un IP" cela ne dépend que de savoir si ton réseau sait faire le lien host <-> ip (un simple ping XXX.YYY-ZZZZ.fr te le dira) quant à la seconde "moyen de le connaitre comment" il faut demander à l'admin réseau car les adresses IP des serveurs sont généralement confidentielles (même si en interne elles ne restent pas confidentielles bien longtemps).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Décembre 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Décembre 2019
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    Merci pour les réponses,

    bon à priori je suis en train de faire un truc pas propre... moi qui voulait initialement sécuriser une gestion de fichier txt, je pensais que les QTableView etait fait pour faire la la gestion bdd sous pyqt5.
    bon je vais me documenter sur ce point.

    pour répondre à la question du message d'erreur, en fait il n'y en a pas...
    un try/except Exception sur le db.open() ne me renvoie pas de rapport d'erreur... le db.open() renvoie simplement un False.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par clement_74 Voir le message
    pour répondre à la question du message d'erreur, en fait il n'y en a pas...
    Relisez la documentation...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Décembre 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Décembre 2019
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    ok avec les deux lignes ci dessous je récupère bien la cause du problème je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    erreur = db.lastError()
    print(erreur.text())
    résultat:
    "Driver not loaded Driver not loaded"

    du coup il y a un pilote à installer sur ma machine pour gérer Mysql Qt.
    merci

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par clement_74 Voir le message
    du coup il y a un pilote à installer sur ma machine pour gérer Mysql Qt.
    Voilà. C'est probablement la DLL client de MySQL (qui devrait être livré avec le kit d'installation de MySQL).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 104
    Points : 4 454
    Points
    4 454
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Salut
    Pour moi Qt c'est une IHM.
    ...
    le jour où il voudra passer sur un autre produit, il sera baisé
    petit ajout,
    pyQt n'est plus la bibliothèque recommandée depuis un bon moment Qt a décidé de ne plus faire évoluer cette bibliothèque, depuis quelque temps. Tous le développement est sur la remplaçante QML. Par exemple kde a migré vers cette bibliothèque.

    Architecture bien différente ! code beaucoup plus propre (selon moi).
    On va écrire des objets presque de la même façon qu'avec pyQt, mais, on va les intégrer dans des fichiers texte qml. Ensuite on peut piloter ces "interfaces" par python mais aussi en javascript

    https://doc.qt.io/qtforpython/tutori...tegration.html
    https://doc.qt.io/qtforpython/tutori...tegration.html

    Vielle présentation mais présente très bien la techno et est en francais
    $moi= ( !== ) ? : ;

  9. #9
    Membre habitué
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 131
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par papajoker Voir le message
    petit ajout,
    pyQt n'est plus la bibliothèque recommandée depuis un bon moment Qt a décidé de ne plus faire évoluer cette bibliothèque, depuis quelque temps. Tous le développement est sur la remplaçante QML. Par exemple kde a migré vers cette bibliothèque.
    Salut,

    Tu es sûr de toi, car pour moi PyQt5 / 6 gère très bien le QML avec QtQml et QtQuick c'est plutôt le XML (format .uic) qui devrait disparaitre au profit du QML.

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    pyQt n'est plus la bibliothèque recommandée depuis un bon moment Qt a décidé de ne plus faire évoluer cette bibliothèque, depuis quelque temps. Tous le développement est sur la remplaçante QML. Par exemple kde a migré vers cette bibliothèque.
    Je ne savais pas que PyQt était terminé (il est sorti la v5.15.7 en juin dernier)... mais même si c'est ça, il y a son fork PySide qui, lui, me semble toujours actif...

    Mais merci pour les liens, je cherche depuis quelque temps à découvrir QtQuick...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 104
    Points : 4 454
    Points
    4 454
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Je ne savais pas que PyQt était terminé
    oops, je ne voulais pas t'effrayer
    Désolé, j'ai été très et beaucoup trop approximatif, tu parlais de IHM (et moi encore plus)

    C'est uniquement Qtwidget (C++ et python) qui est figé en développement depuis quelques années (2 au moins me semble) mais il reste maintenu et aucune date d'abandon n'existe(re-confirmé dans lien suivant).
    Donc Qt n'inverti pour la partie "graphique" que sur la solution qml

    Dans roodmap 2022

    Widgets Qt sont largement utilisés sur les plates-formes de bureau et ont été et seront toujours pris en charge pour fonctionner correctement. De plus, le pont entre Qt Widgets et Qt Quick vous permet d'utiliser le meilleur des deux mondes. Cela se produit principalement autour de QQuickWidget. QQuickWidget vous permettra d'intégrer des éléments Qt Quick dans une application de bureau basée sur des widgets. Le cas d'utilisation principal est d'avoir les dernières capacités d'interface utilisateur avec animation, accélération matérielle, shaders intégrés dans votre projet. De plus, il permet une conversion en douceur de votre interface utilisateur. Rarement, un projet peut refondre l'ensemble de l'application en une seule fois.
    Dans leur communication, ils sont clair depuis longtemps, Widgets Qt n'existe plus que pour assurer la compatibilité avec les anciens projets ...


    ------------
    mini exemples, juste pour voir comment intégrer un modèle (de datas) python dans fichier QML
    parce que , en fait c'est la seule chose particulière à python dans cette techno : faire communiquer nos datas avec l'interface
    $moi= ( !== ) ? : ;

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

Discussions similaires

  1. [VB]Connection vb mysql
    Par Le gris dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/09/2005, 19h18
  2. Lost connection to MySQL server during query
    Par Huntress dans le forum Outils
    Réponses: 3
    Dernier message: 20/09/2005, 15h23
  3. [mysql] Connection delphi à mysql
    Par pataluc dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/06/2004, 16h37
  4. ERROR 2003: Can't connect to MySQL server on 'localhost'...
    Par tonton54 dans le forum Installation
    Réponses: 8
    Dernier message: 25/04/2004, 16h51
  5. [Connexion MySQL] Can't connect to MySQL server
    Par mat_dum dans le forum Outils
    Réponses: 12
    Dernier message: 17/07/2003, 07h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo