关于django中的get_or_create方法的坑

最近在项目中发现了这样的一个坑,那就是我们的需求是不能添加一个相同的对象到数据库中,就通过某些字段的值组合成唯一值到数据库中去查找数据,如果没有找到对象,那就创建一条新的数据库记录,而刚好django又提供了这种方法,那就是get_or_create。可是在测试的时候发现会加入相同的对象。

而解决方法就是:其实我们可以从数据库级别来使这几个字段组合唯一,这样如果有重复的数据就会加不进去。

class Meta:
unique_together = (("xxx", "xxxx"),)

 先到数据库中找,找不到就创建。

但是为什么使用get_or_create方法就会可能失败呢?

因为get_or_create并不是线程安全的,在多线程得情况下,可能会创建相同数据的字段。

猜你喜欢

转载自www.cnblogs.com/bao9687426/p/12208881.html
今日推荐