レコードがすでにデータベースに存在するかどうかをチェックしています(同様のタイトルで)。私はそれを2つの方法で試してみましたが、どちらもうまく動作しませ問題レコードが類似していない場合に挿入する
もっとエレガントな方法(?)を使用していないが、これにより
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
を存在する場合、私は、そうでない場合にエラーが(それはあるが)、「著者」が定義されていないことを言ってクエリをEXISTS得ます。レコードのこのバージョンで
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
のマッチングのカウント、anyresultsを使用して
あまりエレガントな方法(0L)のように見えますが、私はそれに私を取得し、それを一致させる方法を見つけることができませんタプルで"本を追加するためのループ"もしanyresults [0] == 0、0L、 '0'、 '0L' - これらのどれも私をループに入れてくれないようです。
実際には存在しないのではないかもしれないと思います。私が見つけた例は、この小さなプロジェクトの範囲にはない別々の手順です。
ADDITION: 私はunutbuのコードは素晴らしい仕事だろうと思うが、私はまだ、著者は、私は間違いなくそれを渡していた場合であっても、試みられてからINSERTを防止する未定義であると言って、このダムNameErrorを取得します
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"
。
"私はここにいる"テストステートメントは決してプリントされません。何がそこに入るのを止めるだろうか?あまりにも明白なようです - 私はインデントをチェックし続け、コマンドラインでそれをテストし、3つのパラメータすべてを明確に指定しています。
SQLインジェクション、go go go! –