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

Python Discussion :

écrire une requête MySQL utilisant une variable [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut écrire une requête MySQL utilisant une variable
    Bonsoir
    Je suis un éternel débutant en python.

    D'un côté j'ai une variable de type string (qui est un mot) appelée obj1.
    De l'autre une base mysql appelée lexique et une table appelée vocabulaire. Cette table est composée des colonnes ; mots, sens1, sens2 et sens3.
    Je désire rechercher le mot obj1 (1ere colonne) dans ma table vocabulaire et afficher les colonnes sens1, sens2 et sens3 de l'entrée correspondante.
    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
     
    k = conn.cursor()
     
    obj1=cod1
     
    try:
     
     
        k.execute("""SELECT sens1, sens2, sens3 FROM vocabulaire WHERE mot =' + obj1 + '""")
     
        reponse = k.fetchall()
     
        for x in reponse:
           print(x)
     
    except:
              pass               
     
     
    if conn:
          conn.close()
    Je n'arrive pas à déclarer correctement ma variable obj1 dans ma requête.
    J'ai essayé de passer par LIKE mais ça ne marche pas. Qu'est-ce que je fais de mal?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    k.execute("SELECT sens1, sens2, sens3 FROM vocabulaire WHERE mots LIKE ?", ('%' + obj1 + '%',))
    Merci de votre aide
    Eljoj

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par eljoj Voir le message
    Je n'arrive pas à déclarer correctement ma variable obj1 dans ma requête.
    J'ai essayé de passer par LIKE mais ça ne marche pas. Qu'est-ce que je fais de mal?
    Soit vous passez une chaine de caractères à la requête et vous utilisez une des fonctionnalités de formatage basiques, soit vous déléguez ce boulot au pilote du SGDB en lui donnant le bon symbole de remplacement.
    note: comme ce symbole est spécifique au pilote, il faut ouvrir la documentation du pilote utilisé.

    De plus, "ça ne marche pas..." n'est pas un message d'erreur dont on pourrait faire quelque chose.

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

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut
    Bonjour
    Merci de votre réponse !
    "Ca ne marche pas "= il ne se passe rien, aucun message d'erreur, (c'est d'ailleurs pour cela que je viens demander de l'aide ici...)

    Qu'entendez-vous par "vous passez une chaine de caractères à la requête et vous utilisez une des fonctionnalités de formatage basiques"?
    Si je mets directement un mot de ma colonne 1, ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [
        k.execute("""SELECT sens1, sens2, sens3 FROM vocabulaire WHERE mot ='captain'""")
    Je vais chercher du côté du pilote mysql-connector-python-8.0.16-py2.7-windows que j'utilise

    Eljoj

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut
    RE
    Aller chercher du côté du pilote était une bonne idée :
    J'ai trouvé une manière de coder qui fonctionne, ici : https://pynative.com/python-mysql-se...-to-fetch-data
    J'ai légèrement modifié mon code.
    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
     
    k = conn.cursor()
     
    obj1=cod1
     
    try:
     
     
        requetesql=("""SELECT sens1, sens2, sens3 FROM vocabulaire WHERE mot =%s '""")
     
        reponse =k.execute(requetesql, (obj1,))
     
        for x in reponse:
           print(x)
     
    except:
              pass               
     
     
    if conn:
          conn.close()
    Encore merci

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Puisqu'il semble que vous utilisez mysql.connector, vous avez déjà un tuto. crée par les développeurs du pilote ici.

    Et en général, mieux vaut se fier aux informations données par les développeurs (quand elles existent et c'est le cas ici) qu'à des tutos dont vous ne savez pas s'ils sont "à jour".

    Citation Envoyé par eljoj Voir le message
    Qu'entendez-vous par "vous passez une chaine de caractères à la requête et vous utilisez une des fonctionnalités de formatage basiques"?
    Celles que l'on trouve dans un tuto. comme celui qui vient avec Python.... et dont l'usage est peu recommandé ici.

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

  6. #6
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut
    Finalement, j'ai toujours un souci.

    ma variable cod1 est le résultat d'une boucle qui prend successivement plusieurs valeurs sous la forme d'une liste de mots.

    En l'état ma requête ne semble se faire que sur le dernier résultat de la boucle (le dernier mot). Comment faire pour que la requête se fasse successivement sur toutes les valeurs prises par cod1?

    Merci de votre aide.

    Eljoj

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par eljoj Voir le message
    Comment faire pour que la requête se fasse successivement sur toutes les valeurs prises par cod1?
    En répétant successivement la requête pour chaque mot (quel l'intérêt d'écrire une requête en fonction du mot sinon?).

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Enregistrer en BDD une requête Mysql contenant des variables PHP puis l'exécuter
    Par ChriGoLioNaDor dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/11/2009, 02h13
  2. Réponses: 1
    Dernier message: 05/11/2009, 15h19
  3. écrire une variable dans un fichier
    Par Bathou dans le forum Débuter
    Réponses: 2
    Dernier message: 11/09/2008, 15h00
  4. Réponses: 4
    Dernier message: 21/03/2007, 11h35
  5. écrire une variable
    Par antywey dans le forum Windows
    Réponses: 5
    Dernier message: 17/03/2006, 09h06

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