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

时间:2019-07-03 12:05:56

标签: mysql python-2.7 innodb mysql-select-db

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

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

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

3:使用db连接从用户表中读取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实际上是从其他文件运行的。为了简单起见,我只是展示了这个。

1 个答案:

答案 0 :(得分:0)

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

可将其视为在开始事务时对整个数据集进行快照。然后,您执行或看到的所有操作(SELECT)都会被冻结。

更改为READ-UNCOMMITTED或将SELECTs分解为单独的交易。