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 的默认值)。
所以我有一个使用 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 的默认值)。