python - 在 django 中预取有限数量的相关对象

标签 python database django orm

我想显示帖子列表,每个帖子都有 5 条最新评论。如何以最少数量的数据库查询来做到这一点?

Post.objects.filter(...).prefetch_related('comment_set')

检索所有评论,而我只需要其中很少的评论。

最佳答案

我会提出两个查询。首先获取帖子:

posts = list(Post.objects.filter(...))

现在使用 UNION 运行原始 SQL 查询(注意:为简单起见,省略了排序):

sql = "SELECT * FROM comments WHERE post_id=%s LIMIT 5"
query = []
for post in posts:
    query.append( sql % post.id )
query = " UNION ".join(query)

并运行它:

comments = Comments.objects.raw(query)

之后,您可以循环注释并将它们分组到 Python 端。

没试过,不过看起来不错。

还有其他可能的解决方案可以解决您的问题(可能只需要一个查询),请看一下:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

关于python - 在 django 中预取有限数量的相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15874891/

相关文章:

python - 本地正常,但在应用程序引擎上 : ModuleNotFoundError: No module named 'google'

mysql - 有没有特殊的方法来管理不断增长的数据库?

java - DAO设计和数据结构

python - django admin 自定义 ListView

Django:选择...仅来自表

python - 在列表中找到第 n+n 个元素

python - 量化文件更改

python - gdata认证麻烦python

sql - PostgreSQL 中带日期的百分比

python - 在 Django 中向 QuerySet 添加文字值