仅在NULL(或者单元格有值'未占用')时更新单元格?

时间:2015-03-30 15:17:22

标签: python sqlite

我试图更新SQLite3数据库中的值。该数据库有两列:Seat_Number和Name。该表共有30条记录。 Seat_Number列分别包含整数1到30,并且Name列中的所有值都写为' Unoccupied'。

我想知道如果用户输入0到30之间的座位号,是否有办法在名称列中更新单元格,但前提是“名称”列中的值是“未占用”#39;。另外,如果有办法做到这一点,将Name列中的所有值设置为NULL会更容易吗?

这是我到目前为止所拥有的:

import sqlite3

conn = sqlite3.connect('league.db')
c = conn.cursor()

def book_tickets():
    option_1 = True
    name = raw_input("Enter name: ")

    if len(name)>0:
        validated = False
        seat_no = 0
        while validated == False:
            sn = raw_input("Enter seat number: ")

            try:
                seat_no = int(sn)
                validated = True
            except:
                print "Invalid seat number"

            if seat_no >= 1 and seat_no <= 30 and validated == True:
                c.execute("UPDATE Seats SET Name = ? WHERE Seat_Number = ? AND Name = 'Unoccupied'",(name,seat_no))
                conn.commit()

                while option_1:
                    option_1 = raw_input("\t \t Book another seat? \t")

                    if option_1 == "Y" or option_1 == "y" or option_1 == "YES" or option_1 == "yes":
                        book_tickets()

                    elif option_1 == "N" or option_1 == "n" or option_1 == "NO" or option_1 == "no":
                        book_tickets()

                    elif option_1 == "":
                        print "Goodbye!"

                    else:
                        print gap
                        print "Invalid option"

            elif seat_no < 1 or seat_no > 30:
                print "Invalid seat number"
                book_tickets()

            else:
                print "Invalid input."
                book_tickets()

    else:
        print "You didn't enter your name."
        book_tickets()

book_tickets()

剩下的代码很好,主要是为了让用户输入0到31之间的数字,但我只是希望程序告诉用户,如果Name中的值不是&#39; t&#39 ;未占&#39;其中Seat_Number = seat_no,然后打印&#39;座位已经预订&#39;并提示他们输入另一个座位号码。但是,如果Name中的值不是&#39; Unoccupied&#39;其中Seat_Number = seat_no,然后SET Name = name。

1 个答案:

答案 0 :(得分:1)

执行UPDATE后,请检查c.rowcount

如果它为零,则没有更新行,您可以打印“无法预订”消息。

如果是一个,那么一行符合条件并更新,您可以打印“预订成功”消息。

(如果它不止一个,那么就会更新多行。假设Seat_Number是唯一的,那么你就有了一个错误。)