Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser une variable Python dans une requête SQL

Sujet résolu
    2 mai 2022 à 11:43:46

    Bonjour à tous,

    Je cherche à utiliser une variable python pour ajouter à une base de données MySQL une table dont le nom serait choisi par l'utilisateur.

    Du coup, j'utilise input pour demander le nom à l'utilisateur:

    position_name=input("What's the name of your position ?")
    createMySQLtable(position_name)

    Et voilà ma fonction:

    defcreateMySQLtable(name):
    create_table = """
    CREATE TABLE IF NOT EXISTS """,name ,""" (
    id int(10) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id)
    ); """
    cursor = connection.cursor()
    cursor.execute(create_table)
    connection.commit()

    Cependant je reçois le message d'erreur suivant:

    AttributeError: 'tuple' object has no attribute 'encode'

    Merci d'avance à celui qui pourra m'aider!

    -
    Edité par Marwik 2 mai 2022 à 11:48:08

    • Partager sur Facebook
    • Partager sur Twitter
      2 mai 2022 à 11:59:10

      ça serait mieux avec le message d'erreur complet  pour savoir exactement quelle ligne est concerné et l'historique des appels.

      Cependant, une remarque, créer une table pour une position ne me semble pas être une bonne solution, surtout si elle ne contient qu'un identifiant.
      Et il semblerait que position_name soit vu comme un tuple par exemple (x,y) et je ne pense pas qu'un nom de table puisse contenir des paranthèses et encore moins des virgules (si c'est le cas)

      • Partager sur Facebook
      • Partager sur Twitter
        2 mai 2022 à 11:59:37

        Salut Marwik,

        Voici ton erreur :

        position_name=input("What's the name of your position ?")
        createMySQLtable(position_name)
        
        
        def createMySQLtable(name):
           create_table = """                                         
                         CREATE TABLE IF NOT EXISTS """,name ,""" (
                         id int(10) NOT NULL AUTO_INCREMENT,
                         PRIMARY KEY(id)
                         ); """                 # Ici, create_table est défini comme un tuple contenant 3 chaines de caractères
           create_table = (
               "CREATE TABLE IF NOT EXISTS ",
               name,
               " (id int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) ); "
           )                                    # Voici ce même tuple, de manière plus claire
        
        
        cursor = connection.cursor()

        Pour concaténer des chaînes de caractères, il faut utiliser le symbole '+' et pas la virgule.

        Bonne journée à toi ! ;)



        • Partager sur Facebook
        • Partager sur Twitter
          2 mai 2022 à 12:11:45

          Merci Thomatelo!

          Ça a fonctionné en utilisant ta rédaction et en remplaçant les virgules par des +

          Merci à toi aussi umfred pour ton temps!

          -
          Edité par Marwik 2 mai 2022 à 12:19:18

          • Partager sur Facebook
          • Partager sur Twitter
            14 mai 2022 à 2:46:20 - Message modéré pour le motif suivant : Message complètement hors sujet


              16 mai 2022 à 12:06:30

              Sinon la bonne façon, c'est de passer par une requête paramètrée %s aux endroits d'insertion dans la requête et passer un tuple contenant les variables/valeurs dans l'ordre d'insertion https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html
              • Partager sur Facebook
              • Partager sur Twitter
                16 mai 2022 à 17:52:46

                umfred a écrit:

                Sinon la bonne façon, c'est de passer par une requête paramètrée %s aux endroits d'insertion dans la requête et passer un tuple contenant les variables/valeurs dans l'ordre d'insertion https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html


                Pas sûr que ça marche pour le nom d'une table. Bizarre de créer une table avec un nom donné par l'utilisateur et un schéma aussi succinct.

                • Partager sur Facebook
                • Partager sur Twitter
                  16 mai 2022 à 18:40:10

                  c'est vrai, j'avais zappé que c'était pour un nom de table (peut-être pour ça que je n'avais pas donné cette façon initialement). d'ailleurs, j'avais déjà souligné l'étrangeté de la requête
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Utiliser une variable Python dans une 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