Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python2.7 PyQt4 Sqlite

Sujet résolu
    24 novembre 2011 à 13:46:27

    Bonjour à tous,

    Je me permets de solliciter vos services, car je suis sur un problème que je n'arrive pas à résoudre.
    En effet, je cherche à concevoir un soft en python avec une base de données sqlite.
    Pas de problème pour la conception de la BDD en sqlite.

    Dans le cadre de ce projet, j'ai rapidement vu les limites de la bibio sqlite3 (import sqlite3) qui fonctionne très bien! Je me suis ainsi retourner vers PyQt4. Et là, on en vient à mon problème, où je n'arrive tout simplement pas à me connecter sur ma base avec le code suivant:

    from PyQt4 import QtSql
    
    db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName("mybddtest.db")
    db.open()
    print(db.open())
    db.close()
    


    où le print(db.open()) me renvoie toujours false.
    Alors que mybddtest.db est situé au même endroit que le fichier python.
    J'ai fait pas mal de tests différents, suivi des tutoriaux (y compris PySide) différents, et là je bloque sur quelque chose d'assez simple en fin de compte.
    Quelqu'un pourrait-il m'aider sur ce sujet ?

    Merci par avance pour vos réponses.

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      24 novembre 2011 à 16:42:09

      t'as essayé sans l'extension du fichier de ta base?
      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2011 à 22:23:59

        yes, j'ai fait ce test et pareil: false.
        Je continue de chercher, merci en tout cas.
        • Partager sur Facebook
        • Partager sur Twitter
          25 novembre 2011 à 12:07:55

          Désolé de ne pas faire avancer ton problème mais ton post soulève deux questions qui m'intéressent :

          * Quelles sont les limites de sqlite3 dont tu parles ?
          * Tu utilises PyQt uniquement pour la gestion de ta bdd ? o_O

          Sinon, concernant plus directement ton problème :

          As-tu essayé de passer le chemin absolu de ta base de données à la méthode setDatabaseName ?
          Si tu vires le premier appel à db.open(), cela change-t'il le résultat ?
          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            27 novembre 2011 à 12:18:04

            Salut Nohar,

            La librairie sqlite3 est pas mal sauf que je suis intéressé par deux objets: qsqltablemodel & qsqlrelationaltablemodel qui vont répondre à mes besoins.

            Pour répondre à tes autres question: ça ne marche pas quand je mets le chemin absolu.

            Dès que je trouverai la réponse je posterai

            A+

            • Partager sur Facebook
            • Partager sur Twitter
              27 novembre 2011 à 23:53:09

              À ce moment là, pourquoi ne pas utiliser un ORM digne de ce nom plutôt que Qt, comme SQLAlchemy, par exemple ? Pour interagir avec une BDD, c'est quand même plus puissant…
              • Partager sur Facebook
              • Partager sur Twitter
              Zeste de Savoir, le site qui en a dans le citron !
                28 novembre 2011 à 15:58:24

                Salut à tous,

                J'ai finalement réussi à trouver une solution à mon problème. J'ai essayé d'en savoir plus via:

                db.lastError().text()
                


                Et là tout de suite, on voit que les drivers ne se sont pas chargés (Driver not loaded)!
                Derrière, un petit google et on s'aperçoit qu'il faut charger les drivers via la ligne de commande

                app = QtCore.QCoreApplication(sys.argv)
                


                d'où le code finale:



                import sys
                from PyQt4 import QtSql, QtCore
                #chargement des drivers
                app = QtCore.QCoreApplication(sys.argv)
                db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
                db.setDatabaseName("mybdd.db")
                if not db.open():
                    print(db.lastError().text())
                
                db.close()
                


                @Nohar
                Je m'y suis pas trop intéressé car j'ai pas trop cherché dans ce sens,mais que j'ai plutôt suivi le livre Rapid Gui Programming With Python and Qt de Mark Summerfield dans lequel les problématiques d'interaction Python/database sont abordés.
                • Partager sur Facebook
                • Partager sur Twitter
                  28 novembre 2011 à 16:15:20

                  Le truc, c'est que si tu utilises Qt uniquement pour interagir avec une BDD dans un programme qui n'a pas de GUI, alors c'est… mal !

                  C'est comme élever un tigre uniquement pour se servir de la troisième griffe de sa patte antérieure-droite comme cure-dents : ça prend de la place et ça coûte cher à nourrir pour rien, alors que dans la boutique d'à côté ils vendent des cure-dents à laser garantis à vie pour seulement 50¢.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Zeste de Savoir, le site qui en a dans le citron !
                    30 novembre 2011 à 15:20:49

                    Salut Nohar,

                    En me relisant, je me suis rendu compte que je me suis pas bien exprimé.
                    Il s'agit de faire de faire une appli pour un utilisateur, où par rapport à ses besoins il faut faire tourner une bdd derrière pour faire face aux besoins.
                    Donc, j'ai tout de suite penser à faire une interface graphique qui interagissait avec une bdd(sqlite).

                    :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Python2.7 PyQt4 Sqlite

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown