Python Mysql Connector没有获取新内容

时间:2014-09-23 09:19:15

标签: python mysql

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

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

在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)

为什么会这样?

1 个答案:

答案 0 :(得分:1)

最有可能的是,这是一个自动提交问题。 MySQL连接器驱动程序documentation states,它已关闭自动提交。确保在更改表时提交隐式事务。另外,因为默认隔离是REPEATABLE READ,你有:

  

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

所以我猜你甚至要为你的投票脚本管理交易。或者将隔离级别更改为READ COMMITTED

但是,更好的方法是恢复到MySQL客户端默认的自动提交模式。虽然PEP 249指南最初禁用它,但它仅仅是一个提案,很可能是一个严重的设计错误。它不仅让新手想知道未经修改的变化,甚至使你的read-only workload slower,它使数据层设计变得复杂,并且显式中断比隐式 Python zen更好。甚至像Django have it rethought这些迟钝的东西。