如何修复 mysql select 命令在另一个数据库连接更新后给出错误结果?
How to fix mysql select command giving wrong result after the update in another db connection?
我使用 python MySQLdb 模块建立了两个 mysql 数据库连接,即 db
和 db1
。第一个连接用于读取 table,第二个连接用于更新 table。
以下是我使用过的代码序列。
1 : 使用 db
连接从用户 table 读取 ID;当前值 'Y'
2:使用 db1
连接将用户 table 中的 ID 更新为 'N'。
3:使用 db
连接从用户 table 读取 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
的情况下解决此问题,并在更新后使用另一个连接读取 table?
这不是实际的代码实现。 db1 实际上是来自其他文件的 运行。为了简单起见,我只展示了这个。
它正在做它应该做的事情。 REPEATABLE-READ
意味着您看到相同的数据,而不管其他事务中发生了什么。当然,这只会持续到您的交易终止。
当您开始交易时,可以将其视为对整个数据集进行快照。然后,你所做或看到的一切 (SELECT
) 都会及时冻结。
要么更改为 READ-UNCOMMITTED
,要么将 SELECTs
拆分为单独的交易。
我使用 python MySQLdb 模块建立了两个 mysql 数据库连接,即 db
和 db1
。第一个连接用于读取 table,第二个连接用于更新 table。
以下是我使用过的代码序列。
1 : 使用 db
连接从用户 table 读取 ID;当前值 'Y'
2:使用 db1
连接将用户 table 中的 ID 更新为 'N'。
3:使用 db
连接从用户 table 读取 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
的情况下解决此问题,并在更新后使用另一个连接读取 table?
这不是实际的代码实现。 db1 实际上是来自其他文件的 运行。为了简单起见,我只展示了这个。
它正在做它应该做的事情。 REPEATABLE-READ
意味着您看到相同的数据,而不管其他事务中发生了什么。当然,这只会持续到您的交易终止。
当您开始交易时,可以将其视为对整个数据集进行快照。然后,你所做或看到的一切 (SELECT
) 都会及时冻结。
要么更改为 READ-UNCOMMITTED
,要么将 SELECTs
拆分为单独的交易。