在通过表中批量创建的最佳方法是什么?

时间:2020-06-26 13:59:42

标签: python django django-models django-rest-framework

这是我的穿透表的样子:

class ThroughTable(models.Model):
    user = models.ForeignKey(User)
    society = models.ForeignKey(Society)

我得到2个列表,其中包含2个模型对象的ID,这些ID必须添加到我的穿透表中。

user_list = [1,2,5,6,9]
society_list = [1,2,3,4]

在这里,我想为这2个列表中的每个可能的对在“通过”表中创建条目。

我当时正在考虑使用嵌套循环在“通过”表中迭代和创建对象,但这似乎很幼稚,并且复杂度为n * n。

是否有更好的方法来解决此问题?

2 个答案:

答案 0 :(得分:0)

Django提供了bulk_create()方法在数据库中进行输入。它具有可选的参数 batch_size ,因为如果您有数百万条记录,则无法一次性输入所有记录,因此请批量打破记录并输入数据库。

ThroughTable.objects.bulk_create(item, batch_size)

答案 1 :(得分:0)

来自CLI

bulk_create(objs,batch_size = None,ignore_conflicts = False)

此方法以一种有效的方式将提供的对象列表插入数据库>(通常只有1个查询,无论有多少个对象):

对于您的情况,首先创建一个包含所有可能组合的列表,然后保存。

items = []
for user, society in user_list:
    for society in society_list:
        item = ThroughTable(user=user, society=society)
        items.append(item)
ThroughTable.objects.bulk_create(items)