Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 来自tkinter checkbotton的SQL查询_Python_Sqlite - Fatal编程技术网

Python 来自tkinter checkbotton的SQL查询

Python 来自tkinter checkbotton的SQL查询,python,sqlite,Python,Sqlite,我正试图从tkinter的checkbutton创建一个SQL查询。查询条件的数量取决于选中的复选框数量。以下是该计划的初稿: class SearchPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) #Search bar self.entree = tk.Entry(self, text='', width=

我正试图从tkinter的checkbutton创建一个SQL查询。查询条件的数量取决于选中的复选框数量。以下是该计划的初稿:

class SearchPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        #Search bar
        self.entree = tk.Entry(self, text='', width=50)
        self.entree.grid(row=0,column=0,columnspan=3)

        self.entree.bind("<Return>",self.search)

        search_button = tk.Button(self, text='Search',
                                  command=self.search)

        search_button.grid(row=0,column=3)

        #Search Card
        search_card_frame = tk.Frame(self)
        search_card_frame.grid(row=1,column=0,columnspan=2,sticky='NW')

        search_card_label = tk.Label(search_card_frame, text='Search Card:', font=LARGE_FONT)
        search_card_label.grid(row=0,column=0,columnspan=3,sticky='W')

        self.search_mode = ["Name","Types","Text"]
        self.search_var = {}
        self.search_button = {}
        for index,mode in enumerate(self.search_mode):
            self.search_var[mode] = tk.IntVar()
            self.search_button[mode] = tk.Checkbutton(search_card_frame, variable=self.search_var[mode],\
                                                        onvalue = 1, offvalue = 0, text=mode)
            self.search_button[mode].grid(row=1,column=index)

        self.search_results = []

        self.search_results_list = tk.Listbox(self)#, width=30)
        self.search_results_list.grid(row=3, column=0, columnspan=4,sticky='nsew')

    def search(self, event=None):
        search_entree = self.entree.get()
        #card search query
        search_query = "SELECT name, type, text FROM cards WHERE "
        dict_mode = {"Name":"name", "Types": "type", "Text": "text"}
        for mode in self.search_mode:
            if self.search_var[mode].get() == 1:
                search_query += dict_mode[mode]+" LIKE '%"+search_entree+"%' OR "
        search_query = search_query[:-4]

        with sgbd.connect('AllPrintings.sqlite') as cnx:
            c = cnx.cursor()
            self.search_results = c.execute(search_query).fetchall()

我的问题是关于搜索函数的,有没有更好的方法来构建SQL查询?

我建议使用一个列表来存储xxxx,如“%yyy%”,然后使用或作为分隔符将它们连接起来,并将结果附加到搜索查询中:

条件=[]存储LIKE子句 对于self.search_模式下的模式: 如果self.search\u var[mode].get==1: 条件.appendf{dict_mode[mode]}类似“{search_entre}%” 搜索\查询+=或.joinconditions
谢谢,真的好多了!