0

如何使用 Django ORM 查询重写下一个原始 SQL 查询(MySQL)?

mysql> select author_id, 
              count(*) c 
        from library_books 
       group by author_id 
      having c>2 
       limit 3;

+---------------+----+

|     author_id | c  |

+---------------+----+

|             0 | 39 |

|          1552 | 17 |

|          1784 |  8 |

+---------------+-----
4

1 回答 1

2

首先,用书籍数量注释作者查询集。

from django.db.models import Count
authors = Author.objects.annotate(num_books=Count('librarybook')

你还没有展示你的 Django 模型,所以我不得不猜测“图书馆”是反向关系的正确名称。

然后过滤num_books以查找拥有两本书以上的作者。

authors = Author.objects.annotate(num_books=Count('librarybook').filter(num_books__gt=2)

最后,对查询集进行切片以将其限制为 3 个结果。

authors = Author.objects.annotate(num_books=Count('librarybook').filter(num_books__gt=2)[:3]

然后,您可以遍历生成的作者并访问书籍的数量。

for author in authors:
    print author.name, author.num_books
于 2013-07-22T13:28:05.923 回答