Django中的批量插入,修改

性能问题

写代码最终要的两点是什么?我认为1是功能的实现问题。2是代码的运行速度问题也就是代码的优化问题。
一般来说普通的新增或修改使用Django提供的API最直接的create和update或者加上锁的select_for_update等
看一下对比代码如下:

单条插入

for i in range(1000):
	Stduent.objects.create(id=xxx,name=xxx)

单条修改

for i in range(1000):
	Stduent.objects.update(name=xxx)

这种代码功能是可以实现但是让人一看就感觉写代码的人像个XX,一点都不会想到代码的优化,看着还别扭。像这种一口气插入很多条的一般使用多条插入的方法。

多条插入

student_list = []
for i in range(1000):
	student = Stduent(id=xxx,name=xxx)
	student_list.append(student_list)
Stduent.objects.bulk_create(student_list)

多条修改

student_list = []
for i in range(1000):
	student = Stduent(name=xxx)
	student_list.append(student_list)
Stduent.objects.bulk_update(student_list)

bulk_create和bulk_update方法的参数是一个对象集合。注意是对象集合。里面存放的都是一个个对象。像上面的代码,先申请一个集合用来存放对象。在for循环里使用对象初始化,初始化完存入集合不用对象.save(),当执行完毕之后,最后执行bulk_create或bulk_update一口气全部新增。这个就和java的在mapper文件中使用foreach一样。

<foreach collection="ids" item="user_id" open="AND (" close=")" separator="OR">
 //代码块
</foreach>

这种方式比单条插入的好处在于不用每次添加都访问数据库。要知道当需要添加的数据变多后。每条都访问数据库这个代价是相当的大。就像为什么项目中有的地方要使用缓存一样。就是为了减轻数据库压力。如果数据库被压死。那整个项目就崩了。
还有一点我的理解就是为了代码的美观性和可读性,在写代码的时候尽量能封装方法就封装方法。因为一个函数中一大串代码看起来真的很费劲。

最后提前祝大家新年快乐!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值