在Django应用程序中,我有一个名为Comment
的数据模型的查询集。这包含用户留下的文本注释。
想象一下' n'用户评论说。什么是计算哪个用户留下的评论百分比的最快方法?
现在我认为它会成为:
Comment.objects.filter(commenter=<username>).count()/Comment.objects.count()
你有什么建议?我的目标是标记过多评论的人,以便筛选他们的帐户以查找可能的垃圾邮件。我大量运行这个查询,因此专注于性能。
答案 0 :(得分:1)
您应避免为数据库中的每个用户进行一次查询。相反,您可以使用以下内容查询每个用户(甚至是顶级n
评论者)的评论数量:
from django.db.models import Count
total_comments = Comment.objects.count()
# Fetch top 10 commenters, annotated with number of comments, ordered by highest first
User.objects.annotate(num_comments=Count('comment')).order_by('-num_comments')[:10]
for user in users:
percentage = user.num_comments / total_comments
此示例假设您拥有User
模型,Comment
具有外键。
如果您要比较评论的相对数量,则总评论的百分比实际上并不重要。