【问题标题】:how to use two Lists to insert multiple records in Django Model query如何使用两个列表在 Django 模型查询中插入多条记录
【发布时间】:2013-10-25 13:20:03
【问题描述】:

我有三张桌子:

表1,表2,表3

我从 table1 获取数据:

table1queryset = table1.objects.filter(token = 123) 

它给了我 50 条记录。

我从 table2 获取数据:

table2queryset = table2.objects.filter(name='andy')

它给了我 10 条记录。

table3结构如下:

mytoken = models.foreignKey(table1)
myname = models.foreignKey(table2)

现在对于每个 table1 记录,我想将 table2 记录插入 table3。喜欢:

for eachT1 in table1queryset:
    for eachT2 in table2queryset:
        table3(mytoken=eachT1,myname=eachT2).save()

在我的例子中,它将插入 50*10 = 500 条记录。

最有效的使用方法是什么? 我可以将两个查询集都分配给查询吗,例如:

table3(mytoken=table1queryset,myname=table2queryset).save()

【问题讨论】:

    标签: python django list django-models django-orm


    【解决方案1】:

    RelatedManager.add 承诺“但是,使用带有多对多关系的 add() 不会调用任何 save() 方法,而是使用 QuerySet.bulk_create() 创建关系。”

    如果您在第一个模型中定义 ManyToMany 字段并告诉 django 这种关系必须通过表 3(如 ManyToManyField.through)起作用,您可以这样做:

    t2s = [x.id for x in tq2]
    
    for t1 in tq1:
        tq.add(*t2s)
    

    而且可能比创建单独的 T3 模型实例更有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 2018-12-03
      • 2013-11-12
      • 2012-12-16
      • 2023-04-04
      • 2021-01-14
      • 2017-03-12
      相关资源
      最近更新 更多