【发布时间】:2017-03-30 14:14:53
【问题描述】:
在我的程序中,我有一个 sqlite 数据库,其中数据通过 tkinter gui 中的条目小部件附加到其中。我想要它,因此数据仅在验证后才附加到数据库中,因为目前没有验证。
例如,在下面的函数中,它将客户 ID、名字、姓氏、地址和电话号码附加到数据库中的客户表中。我想要它,所以 customerID 条目只接受整数,名字、姓氏和地址不为空,而 phoneNumberEntry 也只接受整数。
我看到人们使用 validatecommand,但我认为我无法实现它,因为我已经在使用命令将数据附加到数据库中。
def appendToCustomerTableEntry(event):
top = Toplevel()
top.title("Add to customer table")
Label(top, text = "customerID: ").grid(sticky = E)
customerIDEntry = Entry(top)
customerIDEntry.grid(row = 0, column = 1)
Label(top, text = "Forename: ").grid(row = 1, sticky = E)
customerForenameEntry = Entry(top)
customerForenameEntry.grid(row = 1, column = 1)
Label(top, text = "Surname: ").grid(row = 2, sticky = E)
customerSurnameEntry = Entry(top)
customerSurnameEntry.grid(row = 2, column = 1)
Label(top, text = "Address: ").grid(row = 3, sticky = E)
customerAddressEntry = Entry(top)
customerAddressEntry.grid(row = 3, column = 1)
Label(top, text = "Phone Number: ").grid(row = 4, sticky = E)
customerPhoneNumberEntry = Entry(top)
customerPhoneNumberEntry.grid(row = 4, column = 1)
exitButton = Button(top, text = "Exit", command = top.destroy)
exitButton.grid(row = 5, column = 2, sticky = W)
appendButton = Button(top, text = "Append", command = lambda:appendToCustomerTable
(customerIDEntry.get(), customerForenameEntry.get(), customerSurnameEntry.get(),
customerAddressEntry.get(), customerPhoneNumberEntry.get()))
appendButton.grid(row = 5, column = 1, sticky = E)
def appendToCustomerTable(customerID, Forename, Surname, Address, TelephoneNumber):
c.execute("INSERT INTO customerTable VALUES (?, ?, ?, ?, ?);", (customerID, Forename, Surname, Address, TelephoneNumber ))
conn.commit()
【问题讨论】:
-
您写道:我看到人们使用 validatecommand,但我认为我无法实现它,因为我已经在使用命令将数据附加到数据库中。 你这是什么意思?
validatecommand的使用与你以后如何使用数据完全无关。它只是一种防止非法输入(例如整数字段中的字母)的机制。 -
@BryanOakley 是的,我现在已经想通了。我之前有点困惑,所以就匆匆忙忙地发了这个帖子。现在我有了一种只能接受整数的方法,这样部分问题就解决了,我只需要弄清楚其余的验证
-
您的问题的答案似乎是简单地创建一个函数来获取所有输入并验证它们,然后在将数据插入数据库之前调用该函数。您要求的与此不同的是什么?
标签: python sqlite validation tkinter