
最近遇到django-bulk-update-or-create 这个方法,我们的项目是利用外部API接口获取到人员信息,保证我们本地数据库与外部API接口获取到的信息保持一致,所以想到django 的批量更新和创建方法,但是官网给的方法没研究明白,图片中的方法也不太明白怎么用,有没有再详细一点的解释
django-bulk-update-or-create 这个方法可以批量更新数据库中的数据,或者如果数据不存在的话就创建新数据。使用步骤如下:
- 导入 bulk_update_or_create 方法:
python
from django.db.utils import BulkCreateError, BulkUpdateOrCreate - 准备要更新或创建的数据,形如:
python
data = [
{ 'name': 'John Doe',
'age': 42
},
{ 'name': 'Jane Doe',
'age': 50
}
] - 使用 BulkUpdateOrCreate 执行批量更新/创建:
python
try:
BulkUpdateOrCreate(YourModel, data, 字段1...)
except BulkCreateError as bce:处理数据已存在,需要更新的情况
- BulkUpdateOrCreate 会首先查找 data 中对象在数据库中的对应记录。如果找到,则执行更新操作。如果没有找到,则执行创建操作。
- 你需要指定用来匹配数据的字段,以及要更新的字段。 BulkUpdateOrCreate 会使用指定的匹配字段对 data 中的对象在数据库中进行查找。
例如:
python
try:
BulkUpdateOrCreate(User, data, ['name'], ['age'])
except BulkCreateError as bce:用户已经存在,更新年龄
User.objects.filter(name__in=[d['name'] for d in bce.row_data]).update(age=F('age') + 1)
以上代码会首先查找 name 字段匹配的 User 对象。如果找到,则更新 age 字段。如果没有找到,则创建新的 User 对象。
使用这个方法可以大大提高批量创建或更新对象的效率。