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 Bunnntyyy 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 Bunnntyyy 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