如何检查唯一的 bulk_create
Posted
技术标签:
【中文标题】如何检查唯一的 bulk_create【英文标题】:How to check unique bulk_create 【发布时间】:2021-12-04 14:38:27 【问题描述】:在 Django 中有一个方法 get_or_create 保证对象的唯一性。但是当添加更多的记录时 1000 处理需要很多时间(作为创建对象的 1000 个请求)。我知道 bulk_create,但它不检查模型输入属性的唯一性。如何加快向数据库添加唯一对象的速度?如果可能的话,在 1 个请求中。
示例模型:
models.py
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
admin.py
# Create only one element (What I want to get)
_, created = Person.objects.get_or_create(first_name='Leon', last_name='Mariano')
_, created = Person.objects.get_or_create(first_name='Leon', last_name='Mariano')
# Create 2 objects with different ID
Person.objects.bulk_create(Person(first_name='Leon', last_name='Mariano'),
Person(first_name='Leon', last_name='Mariano'))
【问题讨论】:
您想对所有对象强制执行此唯一性,还是仅对这一插入强制执行此唯一性?如果您在两个字段上添加唯一约束,则 bulk_insert 不会创建重复项 【参考方案1】:感谢Ivan 的帮助。解决办法是:
models.py
from django.db.models import UniqueConstraint
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class Meta:
constraints = [
UniqueConstraint(fields=['first_name', 'last_name'], name='unique person')
]
admin.py
Person.objects.bulk_create((
Person(first_name='fname', last_name='lname'),
Person(first_name='fname', last_name='lname'),
Person(first_name='fname2', last_name='lname2'),
), ignore_conflicts= True)
【讨论】:
以上是关于如何检查唯一的 bulk_create的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 Firebase 数据库中的唯一用户名(swift)
如何检查数组字段是不是包含唯一值或 MongoDB 中的另一个数组?