现在我使用以下方法来获取与文章相关的评论计数。 但是当我在文章中有N个评论时,它太冒险了。 如何在sqlalchemy中使用一级嵌套计数注释? P.S Comment不仅用于文章模型,还用于其他模型(Project,Page,Something ..)
class Article(db.model)
...
...ORM definitions...
def comment_count(self):
count = 0
for comment in self.comments.filter(Comment.subs.any()).all():
count += comment.subs.count()
count += self.comments.count()
return count
评论与文章有关。 在上面的代码中,self是一篇有很多评论的文章。 这两个模型通过comments_articles表相关。 表的ORM定义如下所示。
comments_articles = db.Table('comments_articles',
db.Column('article_id', db.Integer, db.ForeignKey('article.id'), nullable=False),
db.Column('comment_id', db.Integer, db.ForeignKey('comment.id'), nullable=False))
class Comment(db.Model):
"""Comment model"""
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False)
main_id = db.Column(db.Integer, db.ForeignKey('comment.id'))
level = db.Column(db.SmallInteger, default=0)
content = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=datetime.datetime.now)
main = db.relationship('Comment', remote_side=[id], uselist=False,
backref=db.backref('subs', lazy='dynamic', cascade="all, delete-orphan", single_parent=True,
order_by='desc(Comment.created_at)'))
class Article(db.Model):
"""Article model"""
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
description = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=datetime.datetime.now)
comments = db.relationship('Comment', secondary=comments_articles, lazy='dynamic',
backref=db.backref('article', uselist=False), cascade="all, delete-orphan",
passive_deletes=True, single_parent=True, order_by='desc(Comment.created_at)')
答案 0 :(得分:0)
from sqlalchemy import func
session.query(func.count(Comment.subs)).filter(Comment.subs != None)
我假设如果Comment.subs中没有任何内容,那就是None
。