我已经使用python MySQLdb模块db
和db1
建立了两个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实际上是从其他文件运行的。为了简单起见,我只是展示了这个。
答案 0 :(得分:0)
它正在做应该做的事情。 REPEATABLE-READ
表示您看到相同的数据,而不管其他事务中发生了什么。当然,这只会持续到您的交易终止为止。
可将其视为在开始事务时对整个数据集进行快照。然后,您执行或看到的所有操作(SELECT
)都会被冻结。
更改为READ-UNCOMMITTED
或将SELECTs
分解为单独的交易。