关于django中的get_or_create方法的坑

Posted bao9687426

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于django中的get_or_create方法的坑相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

以上是关于关于django中的get_or_create方法的坑的主要内容,如果未能解决你的问题,请参考以下文章

Django:有没有办法有效地批量 get_or_create()

SQLAlchemy 是不是与 Django 的 get_or_create 等效?

SQLAlchemy 是不是与 Django 的 get_or_create 等效?

Django - SQL 批量 get_or_create 可能吗?

django - 使用 get_or_create 自动创建用户时设置用户权限

使用 User.objects.get_or_create() 在 django 中给出无效的密码格式?