如何在.commit上获取实际的cursor.rowcount?
|
我在Python中使用MySQLdb。
我的更新可能成功或失败:
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读取= 1,但是您只有执行.commit()才能真正知道是否确实发生了任何事情。
我的问题:
在MySQL中,自身内部是否只有一个UPDATE原子?也就是说,如果上面的同一UPDATE(具有不同的PID值,但具有相同的REQUESTED_ROW_ID)以“一次”发送到同一MySQL服务器,是否可以保证一个将成功而另一个将失败?
调用\“ conn.commit()\”之后,是否有办法知道是否有有意义的更改?
**我可以为实际的提交操作获得可靠的.rowcount吗?
.commit操作是否发送实际的查询(完整的SET和WHERE条件),还是仅对受影响的行执行SET,而与激发它们的WHERE子句无关?
我的问题可以通过.autocommit巧妙地解决吗?
没有找到相关结果
已邀请:
1 个回复
漂汀拦
。
操作只是“确认”更新已完成。替代方法是
,它“撤消”已进行的任何更新。