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

Interfaçage autre langage Python Discussion :

Python et MySQL via mysql connector - Nom de table a l'aide d'une variable dans un Query [Python 3.X]


Sujet :

Interfaçage autre langage Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien de laboratoire
    Inscrit en
    Décembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien de laboratoire
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Python et MySQL via mysql connector - Nom de table a l'aide d'une variable dans un Query
    Bonjour !

    Je suis actuellement nouveau et j'apprend sur le tas le python 3 en m'amusant.

    Mon projet actuel est d'utiliser mon RaspberryPi4 en serveur Web, et d'utiliser une interface web (codé a la main(Php/Html)) afin d’afficher mon planning de travail sur une page web.
    Maintenant, je souhaitais créer un programme python capable de récupérer des infos via un fichier *.CSV qui contient mon planning pour l’incrémenter dans ma base de donnée.

    La arrive mon problème, pour accéder à ma database j'utilise mysql connector ça fonctionne bien et c'est simple d'utilisation.
    Sauf que je n'arrive pas a rendre dynamique le nom de la table concernée pour mes requêtes SQL.

    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
     
    if verify == 1 :
           # on récupère le mois concerné, pour ensuite ajouter le planning dans la DB
            mois = row[0]
     
            year = datetime.datetime.now()
            config = {
                    'user': 'root',
                    'password': 'mdp',
                    'host': '127.0.0.1',
                    'database': str(year.year),
                    'raise_on_warnings': True
                    }
            cnx = mysql.connector.connect(**config)
            cursor = cnx.cursor()
     
            cursor.execute("SELECT COUNT(ID) AS nb2 FROM %s WHERE login=%s", (str(mois), row[1],))
     
            results = cursor.fetchall()
            for nb2 in results:
                    print(results[0])
    Mais voila ou est mon problème c'est que je ne peux pas utiliser de variable pour le nom de ma table, car ça renvois des ' ' au début et à la fin du nom de ma table. Exemple: 'decembre'
    Et python répond:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Traceback (most recent call last):
      File "py_csv.py", line 88, in <module>
        cursor.execute("SELECT COUNT(ID) AS nb2 FROM %s WHERE login=%s", (str(mois), row[1],))
      File "/usr/lib/python3/dist-packages/mysql/connector/cursor.py", line 569, in execute
        self._handle_result(self._connection.cmd_query(stmt))
      File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 553, in cmd_query
        result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
      File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 442, in _handle_result
        raise errors.get_exception(packet)
    mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''novembre' WHERE login='BOUSIM'' at line 1
    J'ai chercher de la doc pour mysql.connector, ils expliquent pleins de choses intéressante mais pas ça. Je dois me focaliser sur quelque chose qui doit être faisable d'une manière différente je pense.
    Si quelqu'un a des connaissance a me faire partager je serais extrêmement reconnaissant !

    A l'avenir, je souhaiterais ensuite faire un programme capable de récupérer mon planning dans ma base de donnée, et de créer un fichier *.ics pour le lier a mon google agenda (testé et ça marche ).

    Bonne journée à tous et à toutes ! Et merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 239
    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 239
    Points : 36 692
    Points
    36 692
    Par défaut
    Salut,

    Il faudrait commencer par regarder ce que sont les types de row[0] et row[1] via un print(type(row[0]),...

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

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 075
    Points : 4 388
    Points
    4 388
    Par défaut
    bonjour

    peut-être ne pas utiliser les requêtes préparées pour passer le nom de la table en utilisant fstring

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute(f"SELECT COUNT(ID) AS nb2 FROM {str(mois)} WHERE login=%s", (row[1],))
    $moi= ( !== ) ? : ;

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien de laboratoire
    Inscrit en
    Décembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien de laboratoire
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut C'est la solution a mon problème !
    Bonjour !

    Merci à vous deux d'avoir pris le temps de me répondre !

    Pour te répondre @Wiztricks les valeurs de row[0] et row[1] sont des 'strings'.
    J'ai essayer le code de @papajoker et c'est effectivement la solution a mon problème. J'ai pas du tout pensé à utiliser ça, c'est pourtant la base de python ... j'ai encore beaucoup a apprendre!

    Merci encore pour ce coup de pouce !

    Bonne fin de weekend a vous !

  5. #5
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    bonjour,


    vous ne pouvez pas préparer vos requêtes avec les noms de tabls/database ou même colonne.
    https://dev.mysql.com/doc/refman/8.0...tatements.html Using prepared statements with placeholders for parameter values

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/06/2015, 18h14
  2. Regex : recherche d'une variable dans requete MySQL
    Par paintbox dans le forum Requêtes
    Réponses: 10
    Dernier message: 21/11/2010, 12h41
  3. [MySQL] [PHP 5.3][MySQL 5.1.31] Stocker le code source d'une page dans une table
    Par Exca dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/08/2010, 14h16
  4. comment utiliser une variable dans MySQL
    Par lecaire dans le forum Débuter
    Réponses: 6
    Dernier message: 17/08/2009, 23h57
  5. Réponses: 9
    Dernier message: 12/05/2006, 17h11

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