Python tkinter mysql-如何在使用带有“fetch”方法的条目时获取不同的信息?

Python tkinter mysql-如何在使用带有“fetch”方法的条目时获取不同的信息?,python,mysql,tkinter,Python,Mysql,Tkinter,在我的应用程序中有一个条目,用于输入mysql代码和数据库中的搜索信息,它通过在我的TreeView中执行条目来显示键入的文本。从works fine和所有其他mysql代码中选择*。它尝试了不同的方法,从数据库中获取不同的信息。从示例2中选择示例1,fetchone也可以工作。但是我正在为我的条目寻找一个解决方案,在这里我可以一起执行fetchall、fetchmany和fetchone。 我这么问是因为我不知道我到底该怎么办 代码 下面是一个使用Treeview显示SQL查询结果的示例,Tr

在我的应用程序中有一个条目,用于输入mysql代码和数据库中的搜索信息,它通过在我的TreeView中执行条目来显示键入的文本。从works fine和所有其他mysql代码中选择*。它尝试了不同的方法,从数据库中获取不同的信息。从示例2中选择示例1,fetchone也可以工作。但是我正在为我的条目寻找一个解决方案,在这里我可以一起执行fetchall、fetchmany和fetchone。 我这么问是因为我不知道我到底该怎么办

代码


下面是一个使用Treeview显示SQL查询结果的示例,Treeview是根据结果动态配置的

将tkinter作为tk导入 从tkinter导入ttk 导入mysql.connector 使用您的数据库配置 db=mysql.connector.connecthost=localhost,user=user,password=password,database=database def execute_sqlevent: sql=sqlbox.get1.0,end-1c cursor=db.cursor cursor.executesql 配置treeview table.configcolumns=cursor.column\u名称 对于cursor.column\u名称中的列: table.headingcol,text=col 插入数据 table.delete*table.get\u子项 对于光标中的rec: table.insert,end,values=rec 光标。关闭 root=tk.tk root.geometry1000x800 用于输入SQL语句的文本框 sqlbox=tk.Textroot,高度=10 sqlbox.packfill=x sqlbox.bind,执行 treeview以显示查询结果 frame=ttk.Frameroot frame.packfill=两者,expand=1 frame.rowconfigure0,权重=1 frame.columnconfigure0,权重=1 table=ttk.Treeviewframe,show=headers table.gridrow=0,column=0,sticky=nsew vsb=ttk.Scrollbarframe,orient=vertical,command=table.yview vsb.gridrow=0,column=1,sticky=ns hsb=ttk.Scrollbarframe,orient=horizontal,command=table.xview hsb.gridrow=1,column=0,sticky=ew 表.configxscrollcommand=hsb.set,yscrollcommand=vsb.set root.mainloop
你的代码已经使用了fetchall,那么你的问题到底是什么呢?我在上面写的。我的问题是如何在我的树视图中获取不同的信息。在这段代码中,我得到了所有的信息。当我试图从表中选择reacord[1]时,我得到IndexError。所以现在我正在寻找一个解决方案,在这里我可以使用所有这些函数来输入,并显示不同的选定项或所有项。很难满足不同的查询结果,例如从表中选择a,B,然后选择B,C,表中的D将有不同的结果集,您无法在已创建的树视图中显示它们。我在标签和文本字段中也有相同的问题。但是您会说,我需要创建另一个函数,还是将其他新记录放入except方法?我的条目具有bind方法,我可以问你如何在textfield中显示错误吗?以前从未使用过textfield。因此,对于条目它可以工作,但是对于这个文本字段,缺少了一些内容=除了mysql.connector.errors.ProgrammingError:self.text.insert1.0,语法错误…%s%self.text.get1.0,end-1c。它是有效的,但我的文本有双重含义。如果我输入=a,他会给我双a。。。很抱歉问这个问题。@JoeMo很抱歉我没有得到你想要的。如果我的语法错误,pycharm会告诉我这个错误。我希望括号中的语法与我在文本字段中键入的语法错误。我不理解文本框的插入属性。对于条目,它是有效的。@JoeMo我想您想知道如何用新内容替换文本框中的原始内容。使用.delete1.0,end在插入新内容之前清除文本框。所以我指的是这部分%self.text.get1.0,end-1c
def direct_search_person(self, event):                                              # SEARCH FUNC() ////////////////////
        personen = mysql.connector.connect(user="root", host="127.0.0.1",
                                           database="PersonHobbyStadt")
        cur_person = personen.cursor()                                              # CREATE CURSOR ////////////////////
        try:
            for person in self.parent.main.person_tree.get_children():              # CLEAR TREE ///////////////////////
                self.parent.main.person_tree.delete(person)

            cur_person.execute(self.parent.navbar.info_dbsearch.get())              # EXECUTE CURSOR /////////////////// 
            person_record = cur_person.fetchall()

            for record in person_record:                                            # INSERT INTO TREEVIEW /////////////
                self.parent.main.person_tree.insert(parent="", iid=self.x,
                                                    index="end", text="Parent",
                                                    values=(record[0], record[1],
                                                            record[2], record[3],
                                                            record[4]))
                self.x += 1

            self.parent.navbar.info_dbsearch.delete(0, tk.END)                      # CLEAR ENTRY //////////////////////
        except (AttributeError, tk.TclError):
            pass
        except mysql.connector.errors.ProgrammingError:                             # OPEN MESSAGE BOX IF GET MYSQL ////
            self.parent.message.active_search_msg()                                 # ERROR ////////////////////////////

        personen.commit()
        personen.close()                                                            # CLOSE CONNECTION /////////////////