Python 如何避免我的搜索功能出错?
我想用这段代码做多重搜索功能。但它是围绕着一个错误发生的: 错误: 我的代码:Python 如何避免我的搜索功能出错?,python,tkinter,Python,Tkinter,我想用这段代码做多重搜索功能。但它是围绕着一个错误发生的: 错误: 我的代码: def search_record(): conn = sqlite3.connect("osp_database.db") cur = conn.cursor() selected = db.get() sql="" if selected == "Szukaj wg...":
def search_record():
conn = sqlite3.connect("osp_database.db")
cur = conn.cursor()
selected = db.get()
sql=""
if selected == "Szukaj wg...":
messagebox.showinfo("Informacja","Wybierz inną kategorię")
if selected == "Imię":
sql = "SELECT * FROM memberships WHERE firstname = %s"
if selected == "Nazwisko":
sql = "SELECT * FROM memberships WHERE lastname = %s"
if selected == "PESEL":
sql = "SELECT * FROM memberships WHERE id_number = %s"
if selected == "Miejscowość":
sql = "SELECT * FROM memberships WHERE city = %s"
searched = search.get()
result = cur.execute(sql,searched)
result = cur.fetchall()
if not result:
messagebox.showinfo("Informacja","Nie znaleziono szukanego elementu")
else:
for index, x in enumerate(result):
num=0
index+=2
for y in x:
lb = Label(root,text=result)
lb.grid(row=index,column=num,padx=20,pady=20)
num+=1
我试图用“%{}%”替换“%s”,但没有用。发生了另一个错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Marcin\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "c:/Users/Marcin/Desktop/python/program2.py", line 358, in search_record
result = cur.execute(sql,searched)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 7 supplied.
这实际上是一个语法错误,使用sqlite时,您必须使用
?
作为参数生成器,而不是MySQL中使用的%s
,因此请将其替换,并将值作为元组而不是表达式传递,方法是:
result = cur.execute(sql,(searched,))
请看@MartijnPieters的类似解释
没有逗号,(searched)只是一个分组表达式,而不是元组,因此搜索的字符串被视为输入序列。如果该字符串的长度为7个字符,那么Python将其视为7个单独的绑定值,每个值的长度为一个字符
问题很简单,对于sqlite来说,用
替换%s
?
实际上我做了类似的事情:searched=search.get()name=(searched,)result=cur.execute(sql,name),但是你点亮了我的大脑:DHappy to help:DOf course man!!!
result = cur.execute(sql,(searched,))