Python 如何在Treeview Tkinter中刷新MySQL数据?

Python 如何在Treeview Tkinter中刷新MySQL数据?,python,mysql,tkinter,Python,Mysql,Tkinter,代码 我有这个功能: #Refresh MySQL data to Treeview def refresh(self): self.table.delete(*self.table.get_children()) cursor = mydb.cursor() cursor.execute("select * from requested order by done") for row in cursor:

代码

我有这个功能:

#Refresh MySQL data to Treeview
    def refresh(self):
        self.table.delete(*self.table.get_children())

        cursor = mydb.cursor()
        cursor.execute("select * from requested order by done")
        for row in cursor:
            self.table.insert('','end', values = (row[8], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[9], row[10], row[12]))
如果我插入一条记录或更新一条记录-使用workbench。当我在Tkinter中按refresh时,它不会显示任何新的或修改的数据。保持原样

但是-如果我退出Tkinter应用程序-重新打开它-单击
refresh
它将显示新修改的数据

如果tkinter应用程序正在运行-如果我尝试运行以下查询:
truncate table
using workbench-MySQL将不会完成查询操作,直到我关闭tkinter应用程序

它应该做什么

当我激活函数
refresh
-它应该删除treeview中的所有当前数据,并用MySQL中的现有值更新它

问题

我如何才能做到这一点?

来自评论中的链接帮助我找到了问题所在

通过在MySQL Workbench中运行此查询:

SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
允许我从MySQL更新记录并运行下面的函数-没有问题

#Refresh MySQL data to Treeview
    def refresh(self):
        self.table.delete(*self.table.get_children())

        cursor = mydb.cursor()
        cursor.execute("select * from requested order by done")
        for row in cursor:
            self.table.insert('','end', values = (row[8], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[9], row[10], row[12]))
从评论中的链接帮助我找到了问题所在

通过在MySQL Workbench中运行此查询:

SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
允许我从MySQL更新记录并运行下面的函数-没有问题

#Refresh MySQL data to Treeview
    def refresh(self):
        self.table.delete(*self.table.get_children())

        cursor = mydb.cursor()
        cursor.execute("select * from requested order by done")
        for row in cursor:
            self.table.insert('','end', values = (row[8], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[9], row[10], row[12]))

您是否验证了您的
.execute(…
生成新的甚至任何数据?@stovfl不确定您的意思。但这里有一个附加信息-如果tkinter应用程序正在运行-如果我尝试从工作台
截断
,它将不会执行任何操作,直到我关闭tkinter应用程序第一步,添加
打印('in refresh'))
def refresh(…)
中验证它是否在“我按refresh”时被调用。明白了,听起来像是并发访问锁定?您可能有问题,是否验证了
。执行(…
产生新的甚至任何数据?@stovfl不知道你的意思。但是这里有一个附加信息-如果tkinter应用程序正在运行-如果我尝试从工作台
截断
,它将不会做任何事,直到我关闭tkinter应用程序第一步,添加
打印('in refresh')
内部
定义刷新(…)
验证是否在“我按刷新”时调用它。明白了,听起来像是并发访问锁定?您可能有问题,您可能想在自己的代码中设置事务隔离级别(cf)当打开db连接时,确保始终正确。这很有意义!当打开db连接时,您可能希望在自己的代码(cf)中设置事务隔离级别,因此确保始终正确。这很有意义!