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

时间:2018-04-09 15:21:09

标签: python mysql python-3.x mysql-python

所以我有一个使用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

返回一个unsigned int。

现在发生了两件事: 如果我省略qConn.commit()它将始终返回相同的值,即使mySQL数据库上的值发生了变化。 (但不仅仅是改变事情的提交电话吗?)

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

为什么?这是my code或查询的问题吗?也许有一个缓存没有被清除并在第二次返回?

我也尝试过两次运行查询,但仍然存在同样的问题。 同时摆脱提交调用不会改变任何东西,并且两次提取也不会改变它。

1 个答案:

答案 0 :(得分:2)

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

如果您使用REPEATABLE READ隔离级别运行,则不会看到其他事务的更改。当您致电getUserPoints时,第一个选择位于旧交易中,因此您将获得旧值。然后提交事务,以便在再次调用getUserPoints时获得更新的值。

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