Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MySQLdb不返回上次查询的结果?_Python_Mysql_Python 3.x_Mysql Python - Fatal编程技术网

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

Python MySQLdb不返回上次查询的结果?,python,mysql,python-3.x,mysql-python,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 它返回一个无符号整数 现在发生了两件事: 如果我省略了qConn.commit(),它将始终返回相同的值,即使

因此,我有一个使用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
它返回一个无符号整数

现在发生了两件事: 如果我省略了
qConn.commit()
,它将始终返回相同的值,即使mySQL数据库上的值发生了更改。(但提交调用不只是为了更改内容吗?)

而且,出于某种原因,如果在10分钟以上没有对该确切条目进行查询,则查询将返回与上次查询相同的值。但在第二次查询(如第二次查询)后,它将返回新值

为什么呢?这是问题还是疑问?可能有一个缓存未被清除,并在第二次返回

我也试过运行两次查询,但仍然存在相同的问题。
另外,取消提交调用不会改变任何事情,两次获取也不会改变任何事情。

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

如果使用可重复读取隔离级别运行,则不会看到来自其他事务的更改。调用
getUserPoints
时,第一个选择在旧事务中,因此您可以获得旧值。然后事务被提交,因此当您再次调用
getUserPoints
时,您将获得更新的值


autocommit=False行为可能是不直观的。例如,Django的默认值为autocommit=True,读取提交隔离级别而不是可重复读取(MySQL的默认值)。

您可能会发现这很有用。那么您是说我应该将隔离级别更改为读取提交?或者,立即查询大约120个查询,然后将其保留一个小时的最佳选项是什么?应该明确地考虑更改为自动提交=真,并更改隔离级别以读取已提交的内容。我甚至不会说你应该做那些改变。你需要仔细考虑可能产生的影响。例如,如果您更改为
autocommit=True
,则在需要时由您显式启动事务。因此每次更改某些内容时,我都必须调用
qServer.execute(“启动事务”)
?或者这只是一个查询的例子?这是离题了。否,如果您更改为
autocommit=True
,则您的查询将自动提交。如果您希望在事务中运行两个查询(例如,它们都应成功或都应回滚),则由您启动并提交/回滚事务。