Python MySQLdb 没有返回上次查询的结果?

Python MySQLdb not returning the result of last query?

所以我有一个使用 MySQLdb 的函数:

def getUserPoints(uid):
    qServer.execute("SELECT points FROM TS3_STAMM_1 WHERE ts3_uid=%s", (uid,))
    qConn.commit()
    r = int(qServer.fetchall()[0][0])
    return r

其中 return 是单个无符号整数。

现在发生了两件事: 如果我省略 qConn.commit() 它总是 return 相同的值,即使 mySQL 数据库上的值发生了变化。 (但是提交调用不只是为了改变事情吗?)

而且,由于某种原因,如果超过 10 分钟没有对该确切条目的查询,则查询 return 的值与上次查询的值相同。但是在第二次查询之后,它 return 是新值。

这是为什么? my code 或查询有问题吗?也许有一个缓存没有被清除并且 return 第二次编辑?

我也只是运行查询了两次,还是有同样的问题。 同样,摆脱提交调用不会改变任何东西,获取两次也不会改变它。

mysql-python 的默认设置是 autocommit=False。这意味着您的查询隐式启动事务,您需要显式调用提交以提交对数据库的更改。

如果您是 运行 REPEATABLE READ 隔离级别,您将看不到来自其他事务的更改。当您调用 getUserPoints 时,第一个 select 在旧事务中,因此您获得旧值。然后事务被提交,所以当你再次调用 getUserPoints 时你会得到更新后的值。

autocommit=False 行为可能不直观。例如,Django 默认为 autocommit=True,并且 they recommend READ COMMITTED 隔离级别而不是 REPEATABLE READ(MySQL 的默认值)。