Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupération des données requète SQL

Sujet résolu
    22 décembre 2016 à 19:46:31

    Bonjour à tous !

    Je cherche à faire un service web qui me retourne les données d'une BDD SQLite sous le format JSON.

    Je fait un code mais il ne me retourne que la dernière ligne de ma table CV j'aimerais quelle me les retourne toutes.

    Savez vous comment procéder?
    Voici mon code :

    import sqlite3
    from flask import Flask, json
    
    app = Flask(__name__)
    
    @app.route("/getCvList")
    def getCVs():
        try:
            conn = sqlite3.connect('AreAppSqlBase.db')
            cursor = conn.cursor()
            cursor.execute(""" SELECT * FROM CV """)
            resultCmd = cursor.fetchall()
            cvList = []
            for Cv in resultCmd:
                cvDict = {
                    'ID': Cv[0],
                    'UrlCv': Cv[1],
                    'Etat' : Cv [2]}
                cvList.append(cvDict)
            return json.dumps(Cv)
            cursor.close()
    
        except:
            print "error", sys.exc_info()[0]
    
    
    if __name__ == "__main__":
        app.run()
    

    Merci :)

    Re :) Grâce à un grand ami à moi nous avons trouvé le problème, la minuscule erreur qu'il fallait bien sur ne pas commettre.

    Je vous laisse le bon code avec les indications des erreurs !! Bisous

    import sqlite3
    from flask import Flask, json
    
    app = Flask(__name__)
    
    @app.route("/getCvList")
    def getCVs():
        try:
            conn = sqlite3.connect('AreAppSqlBase.db')
            cursor = conn.cursor()
            cursor.execute(""" SELECT * FROM CV """)
            resultCmd = cursor.fetchall()
            cvList = []
            for Cv in resultCmd:
                cvDict = {
                    'ID': Cv[0],
                    'UrlCv': Cv[1],
                    'Etat' : Cv [2]}
                cvList.append(cvDict)
                #Fallait retourner la liste des CV et pas le Cv du for
            return json.dumps(cvList)
            conn.close()
    
        except:
            print "error", sys.exc_info()[0]
    
    
    if __name__ == "__main__":
        app.run()
    



    -
    Edité par b0uill0n66 22 décembre 2016 à 20:23:34

    • Partager sur Facebook
    • Partager sur Twitter

    Licence Pro Dev Mobile  - Apprenti Manager Systèmes Informatiques et Robotiques, IMERIR Perpignan

      22 décembre 2016 à 20:08:53

      Salut,

      Pour le Json, voici une petite Classe, qui vous aidera:

      class myJson(object):
          def __init__(self, file):
              self.file = file
          def write(self, data):
              with open(self.file, 'w') as outfile:
                  json.dump(data, outfile)
          def read(self):
              with open(self.file, 'r') as infile:
                  config = json.load(infile)
              return config
      
      


      Ensuite, pour votre code:

      J'ai rajouté quelques éléments, pour compléter votre fonction. Peut toujours l'enlever, c'était à titre d'exemple.

      import os
      import sqlite3
      import json #Pas celui de flask
      from flask import Flask
      
      DOSSIER = os.path.dirname(os.path.abspath(__file__)) #Dossier Courant
      JSON_FILE = os.path.join(DOSSIER, 'MyJsonDicoFile') #Fichier Json
      
      jsonDico = myJson(JSON_FILE) #Déclare ma classe Json
      
      app = Flask(__name__)
       
      @app.route("/getCvList")
      def getCVs():
          myDico = {} #Dictionnaire Vide
      
          if os.path.exists(JSON_FILE):
              print('Json already exists')
              #os.remove(JSON_FILE) #Supprimer
              myDico = jsonDico.read() #Lire et sauvegarde dans myDico
          else:
              print('Creating..')
              try:
                  conn = sqlite3.connect('AreAppSqlBase.db')
                  cursor = conn.cursor()
                  cursor.execute(""" SELECT * FROM CV """)
                  resultCmd = cursor.fetchall()
      
                  for Cv in resultCmd:
                      myDico[Cv[0]] = {
                          'UrlCv': Cv[1],
                          'Etat': Cv[2]
                      }
      
                  jsonDico.write(myDico) #Write to Json
      
                  cursor.close()
       
              except:
                  print "error", sys.exc_info()[0]
       
              finally:
                  print(myDico)
       
      if __name__ == "__main__":
          app.run()

      En fait, votre seul problème était le return.

      return json.dumps(Cv)

      Vous retournez UN seul élément de la boucle FOR, puisque Cv est la variable de votre boucle FOR.

      for Cv in resultCmd:

      Il faut retourner la liste complète, c'est-à-dire:

      return json.dumps(cvList)

      Bonne Chance

      A+


      -
      Edité par nolimitech 22 décembre 2016 à 20:11:35

      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2016 à 20:38:13

        Bonjour, Merci pour votre réponse !! J'ai trouvé mon erreur juste avant grâce à l'aide d'un ami mais je suis tout de même intéréssé par votre méthode, Pouvez vous m'expliquer la différence entre les deux méthodes ?

        Merci d'avance :)

        • Partager sur Facebook
        • Partager sur Twitter

        Licence Pro Dev Mobile  - Apprenti Manager Systèmes Informatiques et Robotiques, IMERIR Perpignan

          23 décembre 2016 à 9:36:49

          Salut,

          En fait, il n'y à pas de différence.

          Flask possède un module json, qui fait exactement la même chose.

          La classe myJson est le même principe, mais sans module parent, c'est-à-dire que l'on passe pas par un module comme Flask.

          Vous pouvez donc, utilisez cette classe, partout et dans tous les scripts que vous voulez un fichier de configuration. (Il faut tout de même importer le module json)

          (Seule différence, c'est qu'au lieu de toujours ouvrir et fermer le fichier, myJson est une classe, donc moins de copier/coller, Flask le fait automatiquement aussi, je crois)

          Exemple 

          Un fichier utils.py (Peut toujours être dans le même fichier.. )

          #utils.py
          
          import json
          class myJson(object):
              def __init__(self, file):
                  self.file = file
              def write(self, data):
                  with open(self.file, 'w') as outfile:
                      json.dump(data, outfile)
              def read(self):
                  with open(self.file, 'r') as infile:
                      config = json.load(infile)
                  return config

          Ensuite, tout ce que vous avez besoin est le nom du fichier, et un dictionnaire.

          import os
          from utils import myJson
          
          #Répertoire du script
          DOSSIER = os.path.dirname(os.path.abspath(__file__))
          
          monDictionnaire = {
              'clef1': 'valeur1',
              'clef2': 'valeur2',
              'clef3': ['salut', 'bonjour', 'allo'],
              'clef4': {
                  'subclef1': 'valeur3',
                  'subclef2': 'valeur4',
              },
          }
          
          nomFichier = 'fichierJson'
          FichierCheminComplet = os.path.join(DOSSIER, nomFichier)
          
          #SIMPLE ####################################
          #Je déclares une variable pour la classe myJson
          maClasseJson = myJson(FichierCheminComplet)
          #
          #J'écris dans le fichier le dictionnaire voulu
          maClasseJson.write(monDictionnaire)
          #
          #Lecture du fichier Json, et copie dans un nouveau dictionnaire
          monNouveauDictionnaire = maClasse.Json.read()
          print(monNouveauDictionnaire)
          #############################################

          Ensuite,

          Comme dans l'exemple d'avant, vous pouvez choisir ce que vous faites avec le fichier.

          Si le fichier existe, on maClasseJson.read() , si le fichier n'existe pas, il faut maClasseJson.write(leDictionnaire).

          Si le fichier existe, sauf qu'on veut pas le lire, mais plutôt le supprimer, on fait os.remove(nomDuFichier), ensuite on ré-écrit maClasseJson.write(leDictionnaire).

          Bonne Chance

          A+

          -
          Edité par nolimitech 23 décembre 2016 à 9:37:57

          • Partager sur Facebook
          • Partager sur Twitter
            23 décembre 2016 à 11:05:42

            Super merci pour les explications :)

            Je me permets une autre question sauriez vous comment précéder pour un POST ? Le web service recevrait les données toujours en JSON et devrait convertir le JSON pour le poster dans la BDD.

            -
            Edité par b0uill0n66 23 décembre 2016 à 11:09:10

            • Partager sur Facebook
            • Partager sur Twitter

            Licence Pro Dev Mobile  - Apprenti Manager Systèmes Informatiques et Robotiques, IMERIR Perpignan

            Récupération des données requète SQL

            × 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