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

时间:2019-07-05 19:01:28

标签: python mysql tkinter treeview optionmenu

我尝试通过从OptionMenu中选择一个选项来触发特定的MYSQL查询来填充Tree!第一次运行应用程序就可以了,它确实可以提取所有内容,并传递变量以构建查询:

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中的第一个应用程序,因此除了尝试在调用函数时进行更改,变量的格式设置(我对日期格式有疑问)之外,我不知道还能尝试什么。正如逐步介绍的那样,我看到查询已更新,但没有进一步执行,并且没有相应地填充Tree。

    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

我想通过每次选择OptionMenu项之一时执行新的SQL查询来过滤Treeview对象。

1 个答案:

答案 0 :(得分:0)

好的,很抱歉浪费大家的时间。我发现自己可以通过简单地“清除”整个Treeview,然后用新查询的结果“填充”它来解决问题!

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

所以...

image.focal_sum()