gpt4 book ai didi

python - 加入并计算 sql-alchemy

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:47 25 4
gpt4 key购买 nike

我有一个这样定义的模型:

class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
authors = db.relationship('Author', secondary=articles_authors, backref=db.backref('articles', lazy='dynamic'))
tags = db.relationship('Tag', secondary=articles_tags, backref=db.backref('articles', lazy='dynamic'))
comments = db.relationship('Comment', backref=db.backref('article'), lazy='dynamic')
creation_time = db.Column(db.DateTime, default=datetime.datetime.utcnow)
modification_time = db.Column(db.DateTime, default=datetime.datetime.utcnow)
title = db.Column(db.String(256), nullable=False)
contents = db.Column(db.Text, nullable=False)

我想创建一个查询,为我提供所有带有作者和标签的文章,并计算与给定文章相关的评论。这就是我到目前为止的想法:

Article.query.options(db.joinedload(Article.authors), db.joinedload(Article.tags)).all()

给我带来麻烦的是计数部分——我找不到任何关于如何做的例子。那我该怎么做呢?

编辑:

查询不起作用,但感觉方向正确:

subquery = db.session.query(Comment.article_id, func.count(Comment.id).label('comments_count'))\
.group_by(Comment.article_id).subquery()

return db.session.query(Article, subquery.c.comments_count)\
.outerjoin(subquery, Article.id == subquery.c.article_id)\
.join(Tag).all()

本例中的计数部分工作正常,但我没有使用此查询获取标签和作者。

编辑2:

如果不明显——文章和标签之间的关系是多对多的:

articles_tags = db.Table('articles_tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('article_id', db.Integer, db.ForeignKey('article.id'))
)

文章和作者也是如此。

编辑:

答案:

subquery = db.session.query(Comment.article_id, func.count(Comment.id).label('comments_count'))\
.group_by(Comment.article_id).subquery()

return db.session.query(Article, subquery.c.comments_count)\
.outerjoin(subquery, Article.id == subquery.c.article_id)\
.options(db.joinedload(Article.authors), db.joinedload(Article.tags)).all()

最佳答案

我想你要找的可能是这样的(?)

(
session.query(Article, func.count(Comment.id))
.select_from(Comment)
.join(Comment.article)
.group_by(Article)
)

要获取作者和标签,您应该能够在 Article 对象上使用 .authors.tags。要急切地加载它,您可以使用 joinedload 或 subqueryload。

编辑:

(
session.query(Article, func.count(Comment.id))
.select_from(Comment)
.join(Comment.article)
.options(db.joinedload(Article.authors), db.joinedload(Article.tags))
.group_by(Article)
)

关于python - 加入并计算 sql-alchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29491114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com