Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免我的搜索功能出错?_Python_Tkinter - Fatal编程技术网

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,))