我正在尝试创建get API返回的帖子列表,这些列表应按无序排列。喜欢和评论,包括没有评论或喜欢的帖子。我卡在查询中。如果将其分成如下所示的子查询
查询集
week = datetime.timedelta(7)
today = datetime.date.today()
most_commented_posts = db.session.query(Post).join(Comment).group_by(Post.id).order_by(func.count().desc()).filter(Post.created_at>=(today-week)).all()
我会获得按评论最多的帖子排序的帖子列表 ,但是会跳过没有评论的帖子
下面是我的模特
模型
class Base(db.Model):
__abstract__ = True
created_at = db.Column(db.DateTime, default=db.func.now())
updated_at = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now())
class Post(Base):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))
discription = db.Column(db.String)
image = db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey("user.id", ondelete="cascade"))
comments = db.relationship('Comment', backref='post', lazy='dynamic')
Likes = db.relationship('PostLikes', backref='post', lazy='dynamic')
user = db.relationship('User', backref='user', lazy=True)
class Comment(Base):
__tablename__ = 'comment'
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey("user.id", ondelete="cascade"))
post_id = db.Column(db.Integer, db.ForeignKey("post.id", ondelete="cascade"))
user = db.relationship('User', backref='comment', lazy=True)
class PostLikes(Base):
__tablename__ = 'post_likes'
id = db.Column(db.Integer, primary_key=True)
post_id = db.Column(db.Integer, db.ForeignKey("post.id", ondelete="cascade"))
user_id = db.Column(db.Integer, db.ForeignKey("user.id", ondelete="cascade"))
预先感谢:)
答案 0 :(得分:0)
听起来像您需要使用.outerjoin(Comment)
默认情况下,JOIN
语句执行INNER JOIN
,从而省略所有丢失的行。如果您执行OUTER JOIN
,则缺少的行将被NULLs
“填充”。