Python 如何管理querys中的并发性?

Python 如何管理querys中的并发性?,python,django,database,transactions,django-rest-framework,Python,Django,Database,Transactions,Django Rest Framework,我有以下代码: 如果喜欢slot.objects.filter(餐厅id=r.id,用户id=u.id)。count()==0: l=LikedSlot.objects.create(餐厅=r,用户=u) 因此,我们的想法是仅当用户以前不喜欢餐厅时才创建一个新的LikedSlot,但我有一个竞争条件,因为两个请求可以在第一行中获得True,如果同时到达的话 我尝试了以下方法,但似乎也无法解决问题: 从django.db导入事务 使用transaction.atomic(): 如果喜欢slot.

我有以下代码:

如果喜欢slot.objects.filter(餐厅id=r.id,用户id=u.id)。count()==0:
l=LikedSlot.objects.create(餐厅=r,用户=u)
因此,我们的想法是仅当用户以前不喜欢餐厅时才创建一个新的LikedSlot,但我有一个竞争条件,因为两个请求可以在第一行中获得
True
,如果同时到达的话

我尝试了以下方法,但似乎也无法解决问题:

从django.db导入事务
使用transaction.atomic():
如果喜欢slot.objects.filter(餐厅id=r.id,用户id=u.id)。count()=0:
l=LikedSlot.objects.create(餐厅=r,用户=u)

您知道如何解决这个问题吗?

我建议您在这种情况下使用数据库的引用完整性。更改您的模式,以便resturant+用户对是唯一的:

class LikedSlot(models.Model):
    ...
    class Meta:
        unique_together = ('restaurant', 'user',)
这样,数据库将防止创建重复记录

进行此更改后,您也可以使用内置功能,而不是自己检查重复项:

liked_slot, created = LikedSlot.objects.get_or_create(restaurant=r, user=u)

我只是想做那样的事。它工作得很好,谢谢!