【发布时间】:2014-07-02 05:56:02
【问题描述】:
在transaction.atomic() 内,我正在删除并重新创建对象。
Django 位于 3-worker gunicorn 后面,数据库是 postgres。
问题:当同时向服务器发送大量请求时,Django 会抛出 一些 IntegrityErrors:
IntegrityError: duplicate key value violates unique constraint "atomic_atomictest_name_key"
DETAIL: Key (name)=(foo) already exists.
例子:
models.py
class AtomicTest(models.Model):
name = models.TextField(null=False, unique=True)
views.py
def test_atomic(request):
with transaction.atomic():
models.AtomicTest.objects.filter(name='foo').delete()
models.AtomicTest(name='foo').save()
return http.HttpResponse('OK')
在我的理解中,IntegrityErrors 不应该发生。谁能解释一下为什么?
【问题讨论】:
标签: python concurrency atomic gunicorn django-1.6