Django中get_or_create如何进行批量操作
在使用Django ORM进行开发的时候,经常会遇到需要从数据库里按照指定的key值读取数据(如初始化数据的场景),如果没有读取到就创建并返回该数据对象,即使用get_or_create方法。
当需要操作的数据量很大时,在for循环里面使用会增加数据库访问的次数,因此需要做批量操作,创建数据和更新数据的时候可以使用bulk_create和bulk_update方法,对于get_or_create,在Django2.2之后,bulk_create提供了参数ignore_conflicts可以忽略执行冲突的行,比如主键冲突。借此就可以实现忽略已经创建了的数据对象批量创建数据对象
示例:
使用get_or_create
data=[
{"username":"zhangsan","password":"123456"},
{"username":"lisi","password":"123456"},
{"username":"wangwu","password":"123456"},
]
for item in data:
Account.objects.get_or_create(key=item["username"],
defaults={"password":item["password"]}
))
使用bulk_create:
data=[
{"username":"zhangsan","password":"123456"},
{"username":"lisi","password":"123456"},
{"username":"wangwu","password":"123456"},
]
accounts = []
for item in data:
accounts.append(Account(
username=item["username"],
password=item["password"]
))
Account.objects.bulk_create(objs=accounts, batch_size=500, ignore_conflicts=True)

如何将Django中get_or_create转化为批量操作
浙公网安备 33010602011771号