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 :

pb affichage données postgresql dans pyqt5


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Points : 57
    Points
    57
    Par défaut pb affichage données postgresql dans pyqt5
    bonjour,
    j'ai suivi une petite formation débutant pour créer une interface graphique avec PyQt 5 , QtDesigner et Sqlite3.
    Je souhaiterai maintenant faire fonctionner cette 1ère application avec Postgresql.
    J'ai crée la base de donnée sous Posgresql et j'ai apporté quelques premières modifications à mon programme (pour la connexion notamment).
    Lorsque je lance le programme je n'ai pas de message d'erreur et mon interface s'ouvre, mais lorsque j'appuie sur le bouton permettant de faire apparaitre les données, j'ai le message d'erreur suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    , line 68, in GET_DATA
        for row_number,row_data in enumerate(result):   
    TypeError: 'NoneType' object is not iterable
    le morceau de code incriminé est :
    "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      ....
    def GET_DATA(self):
       db = psycopg2.connect(host = 'xxxx', dbname = 'xxxxx', user = 'xxx', password = 'xxx', port = 5432)
       cursor=db.cursor()     
       command='''SELECT * from u_.test'''
       result=cursor.execute(command)
       self.table.setRowCount(0)       
       for row_number,row_data in enumerate(result):   
                self.table.insertRow(row_number)   
                for column_number, data in enumerate(row_data): 
                    self.table.setItem(row_number,column_number, QTableWidgetItem(str(data)))
    ...
    merci d'avance à ceux qui pourront m'aider !

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est normal, cursor.execute(...) ne renvoie rien (donc = None). Voir un petit exemple ici:
    https://pynative.com/python-postgres...ta-from-table/

    Et la doc du module psycopg2 est là:
    https://www.psycopg.org/docs/

    Cependant, il n'y a pas de relation directe et automatique avec PyQt5 (comme pour le module sqlite3). Si on veut, par exemple, afficher directement le contenu d'une table (y compris une table crée par une requête "select") dans un QTableView, il faut utiliser le driver pour Postgresql déjà intégré dans PyQt5.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre du Club
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Points : 57
    Points
    57
    Par défaut
    bonjour tyrtamos,
    merci pour votre aide, mais j'avoue que je suis un peu perdu...

    si je comprends le module psycopg2 permet de se connecter à une base postgresql et d'interagir avec les données mais n'est pas utile pour ce que je veux faire et il faut utiliser le driver pour postgresql préintégré de Qt5
    Est-ce que ce driver est QPSQL (cf https://qt.developpez.com/doc/4.7/qsqldatabase/)?
    si oui ,je n'arrive pas à ouvrir une connexion avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("localhost");
    db.setDatabaseName("xxx");
    db.setUserName("xxxx");
    dbsetPassword("xxx");
    bool ok = db.open();

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Laissez-moi quelques heures, je vous prépare une réponse.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par fcka0001 Voir le message
    ...mais j'avoue que je suis un peu perdu...
    Et ce n'est pas fini: PyQt5 est très puissant, on peut faire à peu près tout ce qu'on veut avec, mais la contrepartie est que c'est compliqué. Cependant, ça vaut le coup, parce qu'on peut faire avec des chouettes programmes!

    Citation Envoyé par fcka0001 Voir le message
    si je comprends le module psycopg2 permet de se connecter à une base postgresql et d'interagir avec les données mais n'est pas utile pour ce que je veux faire et il faut utiliser le driver pour postgresql préintégré de Qt5
    A l'intérieur d'un programme PyQt5, on peut utiliser le module sqlite3 ou psycopg2 de Python si on n'a pas besoin d'établir une relation automatique avec la base de données. Par exemple, extraire des données et les afficher dans un QTableWidget, c'est possible. Mais si on veut afficher la base de données dans un QTableView, il faut passer par un "modèle" qui fera la liaison entre la base de données et le widget graphique. Cela permettra non seulement de visualiser une des tables de la base de données, mais aussi de la mettre à jour si on modifie les données affichées.

    Citation Envoyé par fcka0001 Voir le message
    Est-ce que ce driver est QPSQL
    Oui!

    Citation Envoyé par fcka0001 Voir le message
    si oui ,je n'arrive pas à ouvrir une connexion avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("localhost");
    db.setDatabaseName("xxx");
    db.setUserName("xxxx");
    dbsetPassword("xxx");
    bool ok = db.open();
    Ce code n'est pas du Python mais du C ou C++. Il faut convertir en Python, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    db = QSqlDatabase.addDatabase("QPSQL")
    db.setHostName("localhost")
    db.setDatabaseName("xxx")
    db.setUserName("yyy")
    db.setPassword("zzz")
    ok = db.open()
    J'ai retrouvé un fil de discussion qui devrait vous apporter des réponses:
    https://www.developpez.net/forums/d1...-modele-pyqt5/

    Il faudra bien sûr adapter ce qui concerne sqlite3 à la base Postgresql, en particulier pour les droits d'accès (setUserName, etc...).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Membre du Club
    Homme Profil pro
    chargé d'études
    Inscrit en
    Janvier 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chargé d'études

    Informations forums :
    Inscription : Janvier 2015
    Messages : 93
    Points : 57
    Points
    57
    Par défaut
    bonsoir tyrtamos,
    merci beaucoup !

Discussions similaires

  1. [Python 3.X] Afficher données postgresql dans une combobox tkinter
    Par bruhnild dans le forum GUI
    Réponses: 1
    Dernier message: 17/11/2017, 13h57
  2. Réponses: 0
    Dernier message: 26/06/2012, 11h52
  3. Réponses: 0
    Dernier message: 14/06/2012, 15h05
  4. Affichage données php dans un tableau
    Par max_dev dans le forum Langage
    Réponses: 15
    Dernier message: 25/05/2010, 16h46
  5. [POSTGRESQL]inserer des données distrinctes dans BD???
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/11/2004, 16h10

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