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