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 :

Accès BD MySQL Server 8


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut Accès BD MySQL Server 8
    Bonjour,

    Je voudrais me connecter à ma base de données MySQL en suivant la méthode suivante :

    1- Utilisation d'un fichier contenant les paramètres de connexion : config.ini
    2- Utilisation de configparser pour la lecture et l'extraction des paramètre de connexion : reading_config_file.py

    config.ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [mysql]
    host = 127.0.0.0
    database = db
    user = user
    password = paswd
    reading_config_file.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import configparser
     
    config = configparser.ConfigParser()
     
    config.read('config.ini')
     
    host = config['mysql']['host']
    database = config['mysql']['database']
    user = config['mysql']['user']
    password = config['mysql']['password']
    En exécutant le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    import MySQLdb
    from MySQLdb import Error
    import src.reading_config_file as param
     
     
    def lister_clients():
     
        cnx = None
        cursor = None
     
        try:
            cnx = MySQLdb.connect(host=param.host, database=param.database, user=param.user, password=param.password)
            cursor = cnx.cursor()
     
    	cursor.execute('SELECT * FROM clients ')
            rows = cursor.fetchall()
            print('Total Row(s):', cursor.rowcount)
            for row in rows:
                print(row)
     
        except Error as e:
            print(e)
     
        finally:
            cursor.close()
            cnx.close()
     
     
    if __name__ == '__main__':
        lister_clients()
    ça marche bien

    Seulement, si j'exécute le scripte de la connexion PyQt5 il me retourne le message de "Problème d'accès à la base de données"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    import sys
    from PyQt5 import QtCore, QtWidgets
    from PyQt5.QtSql import (QSqlTableModel, QSqlDatabase)
    from PyQt5.QtWidgets import (QMainWindow, QMessageBox)
    import src.reading_config_file as param
     
     
    def open_connexion():
     
        db = QSqlDatabase.addDatabase('QMYSQL')
        db.setHostName(param.host)
        db.setDatabaseName(param.database)
        db.setUserName(param.user)
        db.setPassword(param.password)
        db.open()
     
        if not db.open():
            QMessageBox.critical(None, "Problème d'accès à la base de données \n",
                                 'Impossible d\'établir une connexion à la base de données.\n'
                                 'Cliquer Annuler pour sortir.',
                                 QMessageBox.Cancel)
            return None
        else:
            return db
    Est ce que j'ai loupé quelque chose ?? Merci pour votre Aide

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par noureddine1967 Voir le message
    Est ce que j'ai loupé quelque chose ??
    Bah, d'afficher param.host, param.database et etc. histoire de vérifier qu'ils sont ok. C'est un des premiers trucs que j'aurais fait. Eventuellement (test inverse) remplacer db.setHostName(param.host) par db.setHostName("127.0.0.0") et pareil pour les autres pour essayer d'affiner le souci. Accessoirement ton adresse "127.0.0.0" ne me semble pas des plus conventionnelles
    Ensuite c'est voulu d'appeler deux fois db.open() ? Mouais, sait-on jamais, si la première fois ça foire...

    Et sinon le else final sert absolument à que dalle.

    Ensite question organisation... aucun paramétrage possible quoi. Les paramètres sont dans le fichier .ini et c'est marre. Interdit par exemple de les faire saisir quelque part dans ton IHM ce qui permettrait à celle-ci d'être accessible à d'autres invités.
    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]

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    Est ce que j'ai loupé quelque chose ??
    Des tas!
    Le premier est que db.open() retourne un booléen qui permet de tester si ça s'est bien passé (ou pas)... pourquoi ne pas le tester?
    Le second est que si on veut tester que la connexion est "ouverte", c'est la méthode .isOpen() qu'on va alors appeler (qui retourne un booléen).
    Reste que si ça retourne False, c'est que ça a planté quelque part et la cause de l'erreur se récupère à priori via la méthode .lastError()

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

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Merci les gars pour vos réponses,

    Reste que si ça retourne False, c'est que ça a planté quelque part et la cause de l'erreur se récupère à priori via la méthode .lastError()
    Le message d'erreur : Driver not loaded

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    Le message d'erreur : Driver not loaded
    Et avec ça on cherche sur Internet ce qu'on pu faire ceux qui ont rencontré le même problème (les mots clefs "Qt MySQL driver not loaded" devraient le faire)...
    note: difficile de trier les réponses à votre place car leur validité dépend de l'environnement systtème/versions utilisées/... et qu'on ne peut pas tester à votre place.

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

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    Le message d'erreur : Driver not loaded
    Pour info, personnellement je ne passe pas par Qt pour mes accès bdd mais par les modules de Python. Ca évite de lier la techno Modèle à la techno Vue.
    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]

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ca évite de lier la techno Modèle à la techno Vue.
    Difficile d'utiliser un QSqlTableModel sans.... mais on peut toujours refaire son MVC (ou des bouts) plutôt que d'utiliser ce qui est proposé par Qt.

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

  8. #8
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Salut les gars,

    SVP vas y molo avec moi je ne suis qu'un simple amateur autodidacte
    En navigant sur le net j'ai remarqué que c'est un problème récurant qui nécessite la compilation manuelle du qmysl dont je vais essayer d'y arriver mais entre temps

    Difficile d'utiliser un QSqlTableModel sans.... mais on peut toujours refaire son MVC (ou des bouts) plutôt que d'utiliser ce qui est proposé par Qt.
    Comment ??!! y a t'il un exemple
    Merci

Discussions similaires

  1. MySQL Server 4.1 accés à une table
    Par Sancha dans le forum MySQL
    Réponses: 2
    Dernier message: 05/11/2009, 13h44
  2. PB : Can't connect to local MySQL server through socket
    Par nownow dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 30/05/2005, 09h35
  3. 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
  4. Chemin d'accès de MySQL sous linux
    Par sylvain_neus dans le forum Installation
    Réponses: 6
    Dernier message: 17/03/2004, 10h39
  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