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)
posted @ 2021-01-22 15:53  CodingCat1991  阅读(346)  评论(0)    收藏  举报