Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sqlite en python

INSERT IGNORE pour une base de données en python, vérifier la présence

Sujet résolu
    16 novembre 2021 à 16:46:50

    Bonjour à tous,

    Je me trouve bloqué dans mon projet au moment de la vérification d'une donnée dans ma DB.

    Je voudrais vérifier que le pseudo n'existe pas avant de l'ajouter, et le cas échéant redemander un pseudo.

    Seulement, je n'y arrive tout simplement pas, une erreur me bloquant la route, malgré les nombreux forums et la documentation consultés.

    Pourriez vous m'aider ?

    Voici le code en question :

    con = sqlite3.connect('comptes.db')
    cu = con.cursor()
    pseudo = 'Inzerg'
    cu.execute("INSERT REPLACE INTO comptes(pseudo) values ('Pierre')")
    con.commit()
    con.close()

    Et voici le message d'erreur :

    cu.execute("INSERT REPLACE INTO comptes(pseudo) values ('Pierre')")
    sqlite3.OperationalError: near "REPLACE": syntax error

    Cette erreur d'affiche aussi bien avec REPLACE qu'avec IGNORE.

    Merci encore une fois de votre aide !

    Bonne fin de journée à tous !

    EDIT:

    Ok, j'ai réussi, il fallait seulement mettre 'or ignore' en minuscule ...

    J'ai donc seulement une dernière question, comment je peux VERIFIER la présence d'un pseudo? Par exemple, si le pseudo existe deja, ca me renvoie un booléen ou autre.

    C'est possible?

    -
    Edité par FunlY-Fla 16 novembre 2021 à 17:02:58

    • Partager sur Facebook
    • Partager sur Twitter
      16 novembre 2021 à 17:28:36

      FunlY-Fla a écrit:

      J'ai donc seulement une dernière question, comment je peux VERIFIER la présence d'un pseudo? Par exemple, si le pseudo existe deja, ca me renvoie un booléen ou autre.

      S'il existe déjà, on doit pouvoir le retrouver avec un SELECT...
      • Partager sur Facebook
      • Partager sur Twitter
        16 novembre 2021 à 17:34:59

        /mps a écrit:

        FunlY-Fla a écrit:

        J'ai donc seulement une dernière question, comment je peux VERIFIER la présence d'un pseudo? Par exemple, si le pseudo existe deja, ca me renvoie un booléen ou autre.

        S'il existe déjà, on doit pouvoir le retrouver avec un SELECT...


        Yep ce que j'ai testé. Ca marche, mais pas quand je met un variable :/

        pseudo = input("Entrez votre pseudo : ")
                self._pseudo = pseudo
                verif = sqlite3.connect('comptes.db')
                curs = verif.cursor()
                curs.execute("Select * FROM comptes where pseudo = '?'", pseudo)
                if len(curs.fetchall()) == 0:
                    print('Compte créé avec succés, bon jeu {} !'.format(self._pseudo))
                else:
                    print('Pseudo déjà existant : tentez à nouveau de créer un compte avec un autre pseudo !\n')

        Le message d'erreur :

        curs.execute("Select * FROM comptes where pseudo = ?", '{}'.format(pseudo))
        sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 6 supplied.



        Quand je remplace le '?' par une chaine de caractère simple, ca marche, mais pas quand j'essaie d'injecter le pseudo

        Une idée de pourquoi? Il me semble utiliser la bonne technique

        -
        Edité par FunlY-Fla 16 novembre 2021 à 17:43:35

        • Partager sur Facebook
        • Partager sur Twitter
          16 novembre 2021 à 17:44:41

          FunlY-Fla a écrit:

          Une idée de pourquoi? Il me semble utiliser la bonne technique

          Parce que vous avez oublié que le 2ème argument d'un execute doit être un tuple.

          • Partager sur Facebook
          • Partager sur Twitter
            16 novembre 2021 à 18:28:33

            une requête SELECT permet de lire une base de données; une requête INSERT rajoute une ligne dans la base de données; une requête UPDATE met à jour une ou plusieurs lignes selon les conditions.

            le ? ne doit pas être entouré de guillemet, et les paramètres doivent être passé dans une sequence ou un dictionnaire

            curs.execute("Select * FROM comptes where pseudo = ?", (pseudo,))

            ou 

            curs.execute("Select * FROM comptes where pseudo = :cepseudo", {"cepseudo":pseudo})


            https://docs.python.org/3/library/sqlite3.html 

            -
            Edité par umfred 16 novembre 2021 à 18:28:54

            • Partager sur Facebook
            • Partager sur Twitter
              22 novembre 2021 à 9:08:49

              Merci énormément à vous !

              J'avais pourtant cherché sur internet, mais jamais croisé cette manière de mettre une variable en paramètre.

              Je met en résolu, et avance beaucoup grâce à vous !

              Bonne fin de journée !:D

              • Partager sur Facebook
              • Partager sur Twitter

              Sqlite en python

              × 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