使用SQLAlchemy获取查询的外键计数

时间:2019-06-03 13:27:12

标签: python sqlalchemy

我正在研究一个示例/学习博客项目,并且在models.py(见下文)中有两个类分别称为Post和Comment。 Post包含博客文章信息,Comment包含每个帖子的回复。

Models.py

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)
    title = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    comments = db.relationship('Comment', backref='blogpost', lazy='dynamic')



class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    reply = db.Column(db.String(500))
    commentor = db.Column(db.String(64))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)

我想查询Post类,同时返回每篇博文中Comment.reply的计数。

我目前在Post类上的查询如下:

@app.route('/index')
def explore():
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(Post.timestamp.desc()).paginate(
        page, app.config['POSTS_PER_PAGE'], False)
    next_url = url_for('explore', page=posts.next_num) \
        if posts.has_next else None
    prev_url = url_for('explore', page=posts.prev_num) \
        if posts.has_prev else None
    return render_template("index.html", title='Explore', posts=posts.items,
                          next_url=next_url, prev_url=prev_url)

问题:如何使用Flask和SQLAlchemy如何获取每个reply上的Post的计数?

1 个答案:

答案 0 :(得分:0)

处理此问题的方法是,一旦您对posts进行查询,就可以在模板中使用{{posts.comments.count()}}来访问相关注释,因为这是一对一的许多关系。