Python sql 连接池未更新值

Python sql connection pool not updating value

我有一个与连接池相关的问题,但我不明白。

下面是我的代码,这是行为:

  1. 从空 table 开始,我 SELECT 查询不存在的值(无结果)
  2. 然后我执行 INSERT 查询,它成功插入了值
  3. 但是,在插入一个新值后,如果我尝试执行更多 SELECT 语句,它只能工作 3 次中的 2 次,每 3 次尝试总是失败(池大小 = 3。即池size=10 10 次中有 9 次有效)
  4. 最后,如果我重新启动脚本,初始 SELECT 被注释掉(但值在脚本之前的 table 中)我得到插入的值并且它每次都有效。

为什么这段代码似乎 'get stuck returning empty result for the connection that had no result' 直到重新启动脚本?

(请注意,它会不断打开和关闭来自连接池的连接,因为这是从一个 Web 应用程序中获取的,其中每个 connect/close 都是一个不同的 Web 请求。这里我将整个 'web' 切掉其中)

#!/usr/bin/python
import mysql.connector

dbvars = {'host':'h','user':'u','passwd':'p','db':'d'}
# db has 1 empty table 'test' with one varchar field 'id'

con = mysql.connector.connect(pool_name="mypool", pool_size=3, pool_reset_session=False, **dbvars)
cur = con.cursor()
cur.execute("SELECT id FROM test WHERE id = '123';")
result = cur.fetchall()
cur.close()
con.close()

con = mysql.connector.connect(pool_name="mypool")
cur = con.cursor()
cur.execute("INSERT INTO test VALUES ('123');")
con.commit()
cur.close()
con.close()

for i in range(12):
    con = mysql.connector.connect(pool_name="mypool")
    cur = con.cursor()
    cur.execute("SELECT id FROM test WHERE id = '123';")
    result = cur.fetchall()
    cur.close()
    con.close()

    print result

上面的输出是:

[(u'123',)]
[]
[(u'123',)]
[(u'123',)]
[]
[(u'123',)]
[(u'123',)]
[]
[(u'123',)]
[(u'123',)]
[]
[(u'123',)]

同样,如果我不在插入之前执行初始 SELECT,那么所有这些 return 123(如果它已经在数据库中)。好像初始SELECT'corrupts'连接池的连接之一。此外,如果我在 INSERT 之前为空结果执行 2 SELECTs,那么 3 个连接中的 2 个是 'corrupt'。最后,如果我在插入之前执行 3 SELECTs,它仍然可以工作 3 次中的 1 次,因为看起来 INSERT 'fixes' 连接(大概是通过 'results')。

这似乎是 MySQL 的 python 驱动程序中的一个相当严重的错误。也许有些配置不兼容,但显然是一个错误,因为没有显示错误,但它 returns 错误的查询结果。

我向 MySQL 团队提交了错误报告,目前状态为 'verified'。

https://bugs.mysql.com/bug.php?id=102053