Ich versuche zu überprüfen, ob ein Datensatz bereits in der Datenbank (durch einen ähnlichen Titel) existiert, und fügen Sie es ein, wenn nicht. Ich habe es auf zwei Arten versucht und es funktioniert auch nicht.Probleme EINFÜGEN Datensatz, wenn es nicht bereits existiert
eleganteren Weg (?) Mit IF NOT
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
Mit diesem VORHANDEN, erhalte ich einen Fehler auf der IF NOT EXISTS-Abfrage sagen, dass "Autor" nicht definiert ist (obwohl es ist).
Weniger elegante Weise mit Anzahl der gefundenen Datensätze
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
In dieser Version anyresults ist ein Tupel, das wie (0L,) aussieht, aber ich kann nicht einen Weg passender es finden, der mich in die bekommt "Schleife zum Hinzufügen eines Buches." wenn anyresults [0] == 0, 0L, '0', '0L' - keiner von diesen scheint mich in die Schleife zu bringen.
Ich denke, ich kann nicht verwenden WENN NICHT EXISTEN richtig - Beispiele, die ich gefunden habe, sind für separate Verfahren, die nicht wirklich im Rahmen dieses kleinen Projekts sind.
ADDITION. Ich denke unutbu Code große Arbeit wird, aber ich werde noch diese dumme Nameerror bekommen Autor sagen nicht definiert ist, die die INSERT aus wird versucht, verhindert, auch wenn ich es auf jeden Fall bin vorbei in
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"
Es druckt nie, dass "Ich bin hier" Testanweisung. Was würde es daran hindern, dorthin zu gelangen? Es scheint so offensichtlich - ich überprüfe meine Einrückung, und ich teste es auf der Kommandozeile und definiere definitiv alle drei Parameter.
SQL-Injektion, los geh gehen! –