循环中的pymysql connection.cursor()没有接收新行

时间:2016-02-10 16:17:31

标签: python cursor pymysql

mysql = pymysql.connect(host='localhost', port=3306,
    user=user, passwd=passwd, db=db, charset='utf8')
try:
    while True:
        with mysql.cursor() as cursor:
            cursor.execute("SELECT `data` FROM `tbl`")
            rows = cursor.fetchall()
        print(rows)
        print('Selected %d rows' % len(rows))
        # ... work with rows
        time.sleep(10)
finally:
    mysql.close()

假设在此代码开始时表中有0行。然后,已经在这个过程中,我在外面(phpmyadmin)添加几行。但是这段代码仍然打印出没有新行(选中0)。但是如果连接和关闭位于循环内(每次迭代都将重新连接),select将返回一个新行。

为什么?如何在单个连接中修复pymysql看到的所有更改?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。如果在连接参数中包含autocommit=True,则查询结果将是新的,而不是看似缓存的结果。这比每个查询的打开和关闭更优雅。

mysql = pymysql.connect(host='localhost', port=3306,
    user=user, passwd=passwd, db=db, charset='utf8', autocommit=True)