如何通过单次查询批量提交所有数据库变更?
Django批量提交数据库变更优化
你当前循环调用create方法,每一次循环都会发起单独的数据库请求,数据量较大时效率极低。可以用Django ORM提供的bulk_create方法实现单次(或少量多次)数据库提交,大幅提升操作性能。
优化后的代码示例
先批量构造对象实例,再一次性提交所有变更:
# 先构造所有要创建的对象实例,不直接写入数据库 objects_list = [] for i in range(100): # 实例化模型对象,注意不要调用create方法 obj = table2(id=i, **some_extra_fields) objects_list.append(obj) # 一次性提交所有对象到数据库 table2.objects.bulk_create(objects_list)
关键注意事项
bulk_create会将所有对象打包成少量SQL INSERT语句(具体数量取决于数据库的单请求数据限制),请求次数远少于循环create的次数- 该方法不会触发模型的
save()方法,也不会发送post_save信号,如果你的模型有自定义的save逻辑,需要额外处理 - 如果
id是模型的自增字段(AutoField),无需手动指定,数据库会自动生成唯一ID - 若数据量极大(比如数万条),建议分批次提交(比如每1000条提交一次),避免触发数据库的单请求数据量限制
内容的提问来源于stack exchange,提问作者Mohammad AlQudah
相关产品推荐
相关产品推荐

