关于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 可能吗?