打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
django批量插入存在表关联的多表数据应该怎么提高性能呢

一、前言

最近粉丝遇到了一个问题:需要往数据库A表和B表(B表存在字段关联A表id的数据)一次性插入1000条数据。他通过先插一条A表数据并获取它的id再来插入B表数据并进行关联。实际运行效果可想而知,速度是非常慢的。

在django中有个BULK_CREATE方法可以实现批量插入数据的操作,那位小伙伴也尝试了,但由于这些数据是同时插入的,所以通过ORM插入后返回的属性没有数据的id,导致无法插入关联的B表数据。


二、解决方案

对于这种场景我们可以手动的指定数据的id就可以解决这个问题了。

当我们要插入数据的时候,先删除表中原来的数据,然后指定每个id,再进行插入即可,伪代码如下:

your_modelA.objects.delete()
your_modelB.objects.delete()
insert_data = [{'name': 'zs', 'age': 18}, {'name': 'zs', 'age': 18}] # 要创建的数据,随便模拟的
modelA_insert_data = []
modelB_insert_data = []
for i, _data in enumerate(insert_data):
    A_id = i + 1
    _data.update({'id': i + 1})
    modelA_insert_data.append(your_modelA(**_data))
    modelB_insert_data.append(your_modelB(**{**_data, **{'A_id': A_id}}))  # A_id为关联字段
your_modelA.objects.bulk_create(modelA_insert_data)
your_modelB.objects.bulk_create(modelB_insert_data)

新专栏《从0构建自动化测试平台》 欢迎订阅支持!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
老王python:django model的get和filter方法的区别
基础篇:数据库 SQL 入门教程
SQL Server——SQL Server触发器及事务和锁
不得不会的MySQL数据库知识点(七)
算法时代的到来· 电机的多工况多目标优化
(业务层)异步并行加载技术分析和设计
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服