为什么我从Django的get_or_create中获得重复的密钥完整性错误?

时间:2010-12-16 17:14:56

标签: python mysql django innodb mysql-error-1062

更新:在此处找到答案,建议的解决方法适用于我:How do I deal with this race condition in django?

大家好。请注意以下代码:

while True:
    User.objects.get_or_create(email='foo-%d@example.com' % int(time()))

其中User是标准的Django模型,其中unique = True表示电子邮件。当我在几秒钟内同时在两个shell中运行此代码时,我收到如下错误:

IntegrityError: (1062, "Duplicate entry 'foo-1292519049@example.com' for key 'email'")

我的印象是get_or_create()是专为避免这种情况而设计的。看看代码在我看来它应该工作。它首先执行get(),然后如果失败则进入事务并尝试save()。如果失败,它会回滚并再次尝试get()。如果失败则抛出save()的异常,这似乎就是我所得到的。

一些有用的信息 - 我正在使用MySQL v5.1.39和InnoDB运行Django v1.1.0。我们的InnoDB隔离级别是REPEATABLE-READ。

感谢您的帮助!

0 个答案:

没有答案
相关问题