最近粉丝遇到了一个问题:需要往数据库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构建自动化测试平台》 欢迎订阅支持!
联系客服