如何在Python中通过从OptionMenu中选择项来触发动态MYSQL查询?

2024-06-16 09:38:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着从OptionMenu中选择一个选项来触发特定的MYSQL查询来填充树!应用程序第一次运行时,它是正常的,并且它确实拉取了所有内容,它传递变量以构建查询:

SELECT * FROM awp where awp.Order > 1 and awp.date > "1900-01-01" and awp.markerid like "%" 然后,当我从OptionMenu中选择某些内容时,它应该传递新变量。确实如此,例如查询:

SELECT * FROM awp where awp.Order > 1 and awp.date = "2004-01-20" and awp.markerid like "%"

或:

SELECT * FROM awp where awp.Order = 140526 and awp.date > "1900-01-01" and awp.markerid like "MARK_X4"

在从OptionMenus中选择了一些项之后,但是Treeview并没有被新的查询填充,它从MYSQL数据库中提取所有内容

这是我在python中的第一个应用程序,所以除了尝试在调用函数时更改变量的格式(我对日期格式有问题)之外,我不知道还需要尝试什么。通过一步一步地进行,我看到查询已经更新,但并没有进一步执行,树也并没有相应地填充

    def db_refreshPLAN(self,forder, fdate, fmarker):
        if fdate.get() == 'All':
            querydate = '1900-01-01'
            dateoperator = '>'
        else:
            querydate = fdate.get()
            dateoperator = '='
        if fmarker.get() == 'All':
            querymarker = '%'
        else:
            querymarker = fmarker.get()
        if forder.get() == 'All':
            queryorder = str(1)
            orderoperator = '>'
        else:
            queryorder = forder.get()
            orderoperator = '='
        dbAWP = mdb.connect("localhost", port=3306, user="root", passwd="Ceres", db="sqltest1")
        cursor = dbAWP.cursor()
        strquery = str('SELECT * FROM awp where awp.Order ' + orderoperator +
                       ' ' + queryorder + ' and awp.date ' + dateoperator +
                       ' "' + querydate + '" and awp.markerid like "' + querymarker + '"')
        print(strquery)
        cursor.execute(strquery)
        dbAWP.commit()
        rows = cursor.fetchall()
        cpt = 0
        for row in rows:
            self.treeplan.insert('', 'end', text=str(cpt), values=(row[1], row[2], row[3], row[4], row[5], row[6],
                                                               row[7], row[8], row[9], row[10], row[11], row[12],
                                                               row[13], row[14]))
            cpt += 1

我想通过每次选择一个选项菜单项时执行新的SQL查询来过滤Treeview对象


Tags: andfrom内容getdateorderwhereselect
1条回答
网友
1楼 · 发布于 2024-06-16 09:38:17

好的,很抱歉占用了大家的时间。我发现答案是,在用新查询的结果“填充”整个树视图之前,只需“清除”整个树视图

Loop实际上试图在已经填充的Treeview中添加“过滤”结果,而不是创建全新的过滤列表

所以

for i in self.treeplan.get_children():
    self.treeplan.delete(i)

相关问题 更多 >