首页 > 解决方案 > 如何修复在另一个数据库连接中更新后给出错误结果的 mysql select 命令?

问题描述

我已经使用 python MySQLdb 模块进行了两个 mysql db 连接,dbdb1. 第一个连接用于读取表,第二个连接用于更新表。以下是我使用的代码序列。

1:使用连接从用户表中读取id db;当前值“Y”

2:使用连接将用户表中的 id 更新为“N” db1

db3:使用连接从用户表中读取 id 。但是此时它给出了值'Y'。

import MySQLdb

db = MySQLdb.connect("localhost","root","test007","db",charset='')

apikey="123"


cursor=db.cursor()                                             ## fetching no. of data received in valid time range
cursor.execute("select id from USER where apikey=%s",(apikey,))
data=cursor.fetchone()
cursor.close()
print data #current value 'Y'

db1 = MySQLdb.connect("localhost","root","test007","db",charset='')

cursor=db1.cursor()                                             ## fetching no. of data received in valid time range
cursor.execute("update USER set id='N' where apikey=%s",(apikey,))
db1.commit()
cursor.close()
db1.close()

cursor=db.cursor()                                             ## fetching no. of data received in valid time range
cursor.execute("select id from USER where apikey=%s",(apikey,))
data=cursor.fetchone()
cursor.close()
print data
db.close()

在第 3 步中,它不显示更新的值。为什么会这样?如何在不关闭连接db并在更新后使用另一个连接来读取表的情况下解决此问题?

这不是实际的代码实现。db1 实际上是从其他文件运行的。为简单起见,我只是展示了这一点。

标签: mysqlpython-2.7innodbmysql-select-db

解决方案


它正在做它应该做的事情。 REPEATABLE-READ意味着您看到相同的数据,而不管其他事务中发生了什么。当然,这只会持续到您的交易终止。

可以将其视为在您开始事务时拍摄整个数据集的快照。然后,你所做或看到的一切 ( SELECT) 都会被及时冻结。

要么更改为单独的事务,要么将其READ-UNCOMMITTED分解SELECTs为单独的事务。


推荐阅读