Python 为什么Django';我们是得到还是创造?

Python 为什么Django';我们是得到还是创造?,python,mysql,django,innodb,mysql-error-1062,Python,Mysql,Django,Innodb,Mysql Error 1062,更新:在这里找到了答案,建议的解决方法对我很有用: 大家好。遵守以下代码: while True: User.objects.get_or_create(email='foo-%d@example.com' % int(time())) 其中,用户是电子邮件的标准Django模型,unique=True。当我在几秒钟内同时在两个shell中运行此代码时,会出现如下错误: IntegrityError: (1062, "Duplicate entry 'foo-1292519049@ex

更新:在这里找到了答案,建议的解决方法对我很有用:

大家好。遵守以下代码:

while True:
    User.objects.get_or_create(email='foo-%d@example.com' % int(time()))
其中,用户是电子邮件的标准Django模型,unique=True。当我在几秒钟内同时在两个shell中运行此代码时,会出现如下错误:

IntegrityError: (1062, "Duplicate entry 'foo-1292519049@example.com' for key 'email'")
我的印象是get_或_create()是专门为避免这种情况而设计的。看着代码,在我看来,它应该是有效的。它首先执行get(),如果失败,则进入事务并尝试save()。如果失败,它将回滚并再次尝试get()。如果失败,则抛出save()的异常,这似乎就是我得到的

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


谢谢你的帮助

伙计,这太难看了。快速结束肮脏:在操作前使用共享锁,然后在操作后释放。伙计,这太难看了。快速结束脏锁:操作前使用共享锁,操作后释放。