Python Mysql连接器未获取新内容

Python Mysql连接器未获取新内容,python,mysql,Python,Mysql,我制作了一个简单的python脚本,它每x秒检查一个mysql表,并将结果打印到控制台。我使用MySQL连接器驱动程序 但是,运行脚本只打印初始值。我的意思是,如果我在脚本运行时更改了数据库中的值,它不会被脚本注册,而是继续写入初始值 在while循环中检索值的代码如下所示: def get_fans(): global cnx query = 'SELECT * FROM config' while True: cursor = cnx.cursor()

我制作了一个简单的python脚本,它每x秒检查一个mysql表,并将结果打印到控制台。我使用MySQL连接器驱动程序

但是,运行脚本只打印初始值。我的意思是,如果我在脚本运行时更改了数据库中的值,它不会被脚本注册,而是继续写入初始值

在while循环中检索值的代码如下所示:

def get_fans():
    global cnx
    query = 'SELECT * FROM config'
    while True:
        cursor = cnx.cursor()
        cursor.execute(query)
        for (config_name, config_value) in cursor:
            print config_name, config_value
        print "\n"
        cursor.close()
        time.sleep(3)

为什么会发生这种情况?

很可能是自动提交问题。MySQL连接器驱动程序,它已关闭自动提交。确保在更改表时提交隐式事务。另外,因为默认隔离是指您有:

同一事务中的所有一致读取都会读取快照 由一读建立

所以,我想您甚至必须为您的轮询脚本管理事务。或者将隔离级别更改为
读取提交的

不过,更好的方法是恢复到MySQL客户端默认的自动提交模式。尽管指南建议最初禁用它,但这只是一个建议,很可能是一个严重的设计错误。它不仅使新手对未限制的更改感到好奇,甚至使您的更改变得复杂,而且使数据层设计变得复杂,并且打破了显式优于隐式的Python zen。甚至像Django这样迟钝的东西。

在进入循环之前,我也添加了“cursor.execute('SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;')”。它起作用了!非常感谢D