如何解决如何避免我的搜索功能出错?
我想使用此代码执行多种搜索功能。但这是围绕错误发生的: 错误:
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 359,in search_record
result = cur.execute(sql,name)
sqlite3.OperationalError: near "%": syntax error
我的代码:
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 358,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的类似解释
没有逗号,(搜索到的)只是一个分组表达式,而不是一个元组,因此,搜索到的字符串被视为输入序列。如果该字符串的长度为7个字符,那么Python会将其视为7个单独的绑定值,每个长度为1个字符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。