是否可以减少与数据库的连接?

时间:2019-01-23 11:49:23

标签: django python-3.x django-models django-orm

当前,我的Django应用程序具有数百万条记录,我想基于与ManyToMany相关的字段值进行更新。

因此,我的工作奏效了,但是花了很多次。为了仅更新三个记录,它使用 13 查询。

Record模型具有genres字段的ManyToMany字段。另外,还有authors字段,它也是ManyToMany字段。

最后,Author模型的ManyToMany字段表示genres

for i in Record.objects.filter(authors__popular=True).only("authors", "genres"): 
    for a in i.authors.all(): 
        print(a.name)  # test purpose
        for genre in i.genres.all(): 
            if a.genres.exists(): 
                a.genres.add(genre)

当我运行len(connection.queries)时,它会显示已运行的查询号,我希望它小于13。

1 个答案:

答案 0 :(得分:0)

到目前为止,我只是将查询数量减少到1条记录。这就是我实现的方式

for i in Author.objects.annotate(record_count=Count('record'), record_genres=ArrayAgg('record__genres', distinct=True):
    if i.record_count > 0 and i.record_genres:
        i.genres.set(i.record_genres)
        i.save()