J'essaie de vérifier si un enregistrement existe déjà dans la base de données (par un titre similaire) et de l'insérer si ce n'est pas le cas. Je l'ai essayé de deux façons et ni tout à fait fonctionne.Problèmes INSERTION d'un enregistrement s'il n'existe pas déjà
façon plus élégante (?) En utilisant SINON EXISTE
if mode=="update":
#check if book is already present in the system
cursor.execute('IF NOT EXISTS (SELECT * FROM book WHERE TITLE LIKE "%s") INSERT INTO book (title,author,isbn) VALUES ("%s","%s","%s") END IF;' % (title,title,author,isbn))
cursor.execute('SELECT bookID FROM book WHERE TITLE LIKE "%s";' % (title))
bookID = cursor.fetchall()
print('found the bookid %s' % (bookID))
#cursor.execute('INSERT INTO choice (uid,catID,priority,bookID) VALUES ("%d","%s","%s","%s");' % ('1',cat,priority,bookID)) #commented out because above doesn't work
Avec cela, je reçois une erreur sur la SINON EXISTE requête en disant que « l'auteur » n'est pas défini (bien qu'il soit).
moins élégante façon en utilisant le nombre d'enregistrements correspondant à
if mode=="update":
#check if book is already present in the system
cursor.execute('SELECT COUNT(*) FROM book WHERE title LIKE "%s";' % (title))
anyresults = cursor.fetchall()
print('anyresults looks like %s' % (anyresults))
if anyresults[0] == 0: # if we didn't find a bookID
print("I'm in the loop for adding a book")
cursor.execute('INSERT INTO book (title,author,isbn) VALUES ("%s","%s","%s");' % (title,author,isbn))
cursor.execute('SELECT bookID FROM book WHERE TITLE LIKE "%s";' % (title))
bookID = cursor.fetchall()
print('found the bookid %s' % (bookID))
#cursor.execute('INSERT INTO choice (uid,catID,priority,bookID) VALUES ("%d","%s","%s","%s");' % ('1',cat,priority,bookID)) #commented out because above doesn't work
Dans cette version, anyresults est un tuple qui ressemble à (0L,) mais je ne peux pas trouver un moyen de celui-ci qui me fait correspondre dans ce "boucle pour ajouter un livre." si anyresults [0] == 0, 0L, '0', '0L' - aucun de ceux-ci ne semble me mettre dans la boucle.
Je pense que je ne vais peut-être pas utiliser IF NOT EXISTS correctement - des exemples que j'ai trouvés sont pour des procédures séparées, qui ne sont pas vraiment dans le cadre de ce petit projet.
AJOUT:. Je pense que le code de unutbu fonctionnera très bien, mais je vais faire encore cette NameError muet disant auteur est indéfini qui empêche l'INSERT d'être essayé, même quand je suis faisant passer définitivement dans
if form.has_key("title"):
title = form['title'].value
mode = "update"
if form.has_key("author"):
author = form['author'].value
mode = "update"
print("I'm in here")
if form.has_key("isbn"):
isbn = form['isbn'].value
mode = "update"
Il n'imprime jamais cette instruction "Je suis ici". Qu'est-ce qui l'empêcherait d'entrer là-bas? Cela semble si évident - je continue de vérifier mon indentation, et je la teste sur la ligne de commande et je spécifie clairement les trois paramètres.
Injection SQL, partez! –