首页 > 解决方案 > 将数据库中的数据显示到 tkinter 中不起作用

问题描述

我在这里定义了一个函数,它应该可以正常工作,因为我在其他地方使用了类似的函数但没有给出任何条件(其中..喜欢或正则表达式)并且它在那里工作正常,当我使用正则表达式时它没有给出一个输出。这是为什么?提前致谢 :)

代码:

def search():
    log = Toplevel(root)
    log.title('View all customers')
    def db():  
        selected = drop.get()
        result_win = Toplevel(log)
        result_win.title('Search result')

        con = mysql.connect(host='localhost', user='root',
                                password='*****', database='BOOK')
        c = con.cursor()

        c.execute(f"SELECT * from books where '{selected}' regexp 
        '{e_sch.get()}';")
        result = c.fetchall()
        index=0
        for index, x in enumerate(result):
            num = 0
            for y in x:
                lookup_label = Label(result_win, text=y)
                lookup_label.grid(row=index+1, column=num)
                num +=1
        con.close()        
        l1 = Label(result_win,text='Sl.No',font=font_text)
        l2 = Label(result_win,text='Title',font=font_text)
        l3 = Label(result_win,text='Authors',font=font_text)
        l4 = Label(result_win,text='Subject',font=font_text)
        l5 = Label(result_win,text='Availablity',font=font_text)
        btn_ext = Button(result_win,text='Exit',font=font_text,command=result_win.destroy,borderwidth=2,fg='#eb4d4b')

        l1.grid(row=0,column=0,padx=20)
        l2.grid(row=0,column=1,padx=20)
        l3.grid(row=0,column=2,padx=20)
        l4.grid(row=0,column=3,padx=20)
        l5.grid(row=0,column=4,padx=20)
        btn_ext.grid(row=index+2,columnspan=7,ipadx=540)

    global a
    l = Label(log,text='Search',font=Font(family='helvetica', size='20'))
    drop = ttk.Combobox(log,value=['Search by....','Sl.no','Title','Authors','Subject','Availablity'])
    drop.current(0)
    l2 = Label(log,text='Enter',font=font_text)
    e_sch = Entry(log)
    b_sch = Button(log, text='Search book', command=db, font=font_text) 
    b_ext = Button(log, text='Exit', command=log.destroy, font=font_text) 
    a = drop.get()
    l.grid(row=0,columnspan=3,pady=20)
    drop.grid(row=1,column=0,columnspan=3)
    l2.grid(row=2,column=0,padx=(20,0))
    e_sch.grid(row=2,column=1, padx=30, ipady=5,pady=20)
    b_sch.grid(row=3,column=0,columnspan=3,ipadx=200)
    b_ext.grid(row=4,column=0,columnspan=3,ipadx=237)

有时我也会收到此错误UnboundLocalError: local variable 'index' referenced before assignment

标签: pythonmysqltkinter

解决方案


SELECT 语句的语法不正确:

SELECT * from books where '{selected}' regexp '{e_sch.get()}';

应该:

SELECT * from books where `{selected}` regexp '{e_sch.get()}';

字段名称应该用 ` 包围,而不是''.


推荐阅读