Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête SQL et comparaison

SQLAlchemy, Python, fonction

    29 juillet 2022 à 21:25:16

    Bonjour,

    J'ai un soucis qui se pose sur le principe des fonctions.

    J'ai fait une fonction qui me permet d'exécuter une requête que voici:

    def requeteImport(query):
        engine = create_engine(url)
        connexion = engine.connect()
        result_proxy = connexion.execute(query)
        result_set = result_proxy.fetchall()
        return(result_set)

    La requête se passe comme prévu et j'ai bien les données qui se "stockent" dans "result_set" :

    [('1',), ('1',), ('2',)]

    J'engage ensuite une fonction "if/else":

    if '1' in result_set:
        print("oui")
    else:
        print("non")

    Et là, j'obtient "non".

    Voici le code dans son ensemble:

    result_set = []
    
    # -- Fonction de requete SQL --
    def requeteImport(query):
        engine = create_engine(url)
        connexion = engine.connect()
        result_proxy = connexion.execute(query)
        result_set = result_proxy.fetchall()
        return(result_set)
    
    query = ("SELECT * FROM tabletest2")
    requeteImport(query)
    if '1' in result_set:
        print("oui")
    else:
        print("non")

    Je suppose que mon problème vient de cette liste qui contient des tuples où les valeurs ne sont pas atteintes, mais je bute sur comment faire sauter ces tuples.

    A savoir que j'utilise SQLAlchemy, PyMysql et la BDD est MySQL.

     Si quelqu'un a ne serais-ce qu'un début de piste ou mieux, une solution, merci!





    • Partager sur Facebook
    • Partager sur Twitter
      29 juillet 2022 à 22:39:38

      Avec une liste de listes ou un tuple de tuples tester, il faudra faire une boucle pour tester la présence de '1' dans chacun des items.

      Comme c'est une base de donnée SELECT.... WHERE... serait plus approprié.

      • Partager sur Facebook
      • Partager sur Twitter
        30 juillet 2022 à 0:29:52

        Sinon cela fonctionne aussi 

        from itertools import chain
        
        lst = [('1',), ('1',), ('2',)]
        
        print('1' in chain(*lst))



        • Partager sur Facebook
        • Partager sur Twitter
          30 juillet 2022 à 11:18:38

          mps a écrit:

          Avec une liste de listes ou un tuple de tuples tester, il faudra faire une boucle pour tester la présence de '1' dans chacun des items.

          Comme c'est une base de donnée SELECT.... WHERE... serait plus approprié.

          En effet, j'avais bien pensé à faire une boucle mais ça ne me plaisait pas trop. Le WEHERE me paraît plus propre (et presque une évidence maintenant) puisqu'il me suffit de faire un "if not" dans la suite de mon script. Je pars sur cette solution.

          Nephthys a écrit:

          Sinon cela fonctionne aussi 

          from itertools import chain
          
          lst = [('1',), ('1',), ('2',)]
          
          print('1' in chain(*lst))



          C'est une autre possibilité que je garde en mémoire suivant le comportement in fine.

          Merci pour vos solutions!!



          • Partager sur Facebook
          • Partager sur Twitter

          Requête SQL et comparaison

          × 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