情景介绍
为了促进用户消费,增加使用,产品决定上线一波优惠券。
不是xx宝,x信已有的优惠券功能。
这涉及到一个问题。
我们需要往数据表里面一次性大量主动添加数据,创建优惠券对应优惠码。
1.最不动脑袋的办法。
for循环配合db.session.add()。
假设你需要生成1000个优惠码。
不可否认,用这个确实很简单,但是总觉得不够'好',因为add原本解决的就是单个添加的功能。
2.稍微思考的办法。
db.session.add_all()
add_all()中传入orm隐射的对象列表。
看似省略看for循环,但是我们看一下add_all()函数就可以发现问题
它内部帮你实现了for循环,实际上依旧是生成了1000次sql操作,依旧不合理。
3.最终选择的办法
db.session.bulk_insert_mappings(name, data)
bulk_insert_mappings 需要两个参数,第一个name为对应需要添加的数据表的morder类名,第二个data为列表,里面的每个元素是字典格式,列表的键为对应数据表的字段名。
他能将多次add操作处理为一个sql语句处理,时间方面大幅度优化(具体时间优化数据没做比较)
以上