由于每个查询集都是unique,因此在循环中生成太多sql查询的情况下,对大型查询集进行子集化的最佳方法是什么?
例如,我需要生成一份报告,要求我循环遍历数据库中的所有数据:
for user in users:
notes = Note.objects.filter(owner=user.id)
for note in notes:
answers = Answer.filter(note_id = note.id)
for answer in answers:
#do something
正如您已经可以看到这个循环有多糟糕,因为每个filter语句都会创建一个命中数据库的查询集。
在这种情况下我想做些什么来避免数千次调用数据库?
谢谢!
答案 0 :(得分:1)
试试这个
answer = Answer.objects.filter(note__owner__in = user_ids)
答案 1 :(得分:1)
如果users
是QuerySet,那么
answers = Answer.objects.filter(note__owner__in=users)
更新:如果您想对Answer
note
和owner
执行某些操作,那么
answers = Answer.objects.filter(note__owner__in=users).select_related('note', 'note__owner')
它需要一个查询。