0
我在Python中使用MySQLdb。如何在.commit后获得实际的cursor.rowcount?
我有可能成功也可能失败的更新:
UPDATE table
SET reserved_by = PID
state = "unavailable"
WHERE state = "available"
AND id = REQUESTED_ROW_ID
LIMIT 1;
正如你或许可以推断,多个进程正在使用的数据库,我需要流程,能够安全地抢行为自己,不种族条件导致问题。我的理论(也许不正确)是只有一个进程能够用这个查询成功(.rowcount = 1) - 其他进程将失败(.rowcount = 0)或获得不同的行(.rowcount = 1)。
问题是,似乎所有通过MySQLdb发生的事情都发生在虚拟世界中 - .rowcount reads = 1,但是你真的不知道是否真的发生了什么,直到你执行一个.commit )。
我的问题:
- 在MySQL中是一个UPDATE中本身原子?也就是说,如果上述相同的UPDATE(使用不同的PID值,但具有相同的REQUESTED_ROW_ID)在“一次”发送到同一个MySQL服务器,我是否保证一个会成功,另一个会失败?
- 有没有办法知道,叫“conn.commit()”之后,是否有一个有意义的改变与否? **我可以为实际的提交操作获得可靠的.rowcount吗?
- 是否.commit操作中发送实际的查询(SET的和WHERE条件不变,)还是只是在受影响的行进行套,独立,鼓舞他们的WHERE子句?
- 我的问题被.autocommit整齐地解决了吗?