如何使用MySQLdb创建跨Python多个语句的事务?

时间:2011-01-09 05:47:02

标签: python mysql

我知道使用InnoDB表,事务是自动提交,但是我理解这意味着单个语句?例如,我想检查表中是否存在用户,如果不存在,则创建它。然而,存在竞争条件。我相信在执行select之前使用事务,将确保表保持不变,直到后续插入,并且事务被提交。你怎么能用MySQLdb和Python做到这一点?

2 个答案:

答案 0 :(得分:4)

存在一个SELECT ... FOR UPDATE,允许您锁定行被另一个事务读取但我相信记录必须首先存在。然后你可以像你说的那样做,并在你提交后解锁它。

在您的情况下,我认为最好的方法是简单地在用户名上设置一个唯一约束并尝试插入。如果您收到密钥异常,则可以通知用户该名称已被删除。

答案 1 :(得分:2)

从理论上讲,你可以disable auto-commit,按Two Phase Commit transaction中的定义执行Python's DB API。在野外看来,这个功能似乎有点困难。在MySQL上使用SQLAlchemy seems to include support,所以它是可能的。