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

How to trigger dynamic MYSQL query in Python by selecting item from OptionMenu?

我已经尝试通过 selectOptionMenu 中的选项之一来触发特定的 MYSQL 查询来填充树!第一次应用程序 运行 没问题,它确实提取了所有内容,它传递变量以构建查询:

SELECT * FROM awp where awp.Order > 1 and awp.date > "1900-01-01" and awp.markerid like "%" 然后它应该在我从 OptionMenu select 中传递新变量。确实如此,例如查询是:

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 selecting 一些项目之后,但是 Treeview 没有被新查询填充,它从 MYSQL db!

中提取所有内容

这是我在 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

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

好的,很抱歉占用大家的时间。我通过 "clearing" 整个 Treeview 在 "populating" 之前用新查询的结果简单地找到了答案!

循环实际上试图在已经填充的 Treeview 中添加 "filtered" 结果,而不是创建全新的过滤列表!

所以...

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