0

次のコードを使用してシステムで予約を行いましたが、エラーが返されました。

conn = sqlite3.connect('SADS.db')
cur = conn.cursor()
choice = raw_input("What day would you like to book seats on? F/S : ")
if choice == "F":
    bookseats = [0,1]
    print"What seats would you like to book?"
    bookseats[0] = raw_input("Choice : ")
    bookseats[1] = raw_input("What is their user ID? : ")
    cur.execute("SELECT * FROM seats WHERE Booked='N'")
    rows = cur.fetchone()
    for row in rows:
        if row == None:
            break
        elif row[1] == bookseats[0] and row[4] == "N" and row[3] == "F":
            print "Seat Number:" , row[1] ,"Is now booked!"
            cur.execute("UPDATE seats SET Booked =N AND CustID=?", (bookseats[0]))

エラー:

TypeError: 'float' object has no attribute '__getitem__'

私はエラーが何であるか、そしてそれをどのように修正するか本当に混乱していますか?

4

2 に答える 2

2

rows = cur.fetchone()1行だけを取得するの結果をループしています。その行を削除し、カーソルを直接ループします。

cur.execute("SELECT * FROM seats WHERE Booked='N'")
for row in cur:

row == Noneどちらかをテストする必要はありません。また、Booked列がに等しいかどうかをテストする必要もありませんN。ループを次のように単純化します。

cur.execute("SELECT * FROM seats WHERE Booked='N' AND CustID=?", (bookseats[0],))
row = cur.fetchone()
if row is not None and row[3] == "F":
    print "Seat Number:" , row[1] ,"Is now booked!"
    cur.execute("UPDATE seats SET Booked =N AND CustID=?", (bookseats[0]))

bookseats[0]自分の列に一致する行と、3番目の列がに設定されている行をデータベースに要求するだけですF。スキーマを表示しなかったため、そのためのクエリを更新する方法を推奨するのは困難です。

クエリが正しくありませUPDATEん。おそらく次のことを意味します。

cur.execute("UPDATE seats SET Booked='Y' WHERE CustID=?", (bookseats[0],))

代わりは。

ただし、SQLクエリと更新は疑わしいようです。完全なスキーマを知らなくても、座席番号と顧客番号を場所で混ぜているように見えます。

于 2013-02-07T18:26:28.987 に答える
2

fetchone行のリストを返しませんが、1行のみを返すため、これは正しくありません。

rows = cur.fetchone()
for row in rows:

代わりに:

row = cur.fetchone()
于 2013-02-07T18:27:15.540 に答える