如何通过从 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)
我已经尝试通过 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)