Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy查询:获取按喜欢和评论数量排序的帖子列表_Python_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python sqlalchemy查询:获取按喜欢和评论数量排序的帖子列表

Python sqlalchemy查询:获取按喜欢和评论数量排序的帖子列表,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我正在尝试创建一个GETAPI返回的帖子列表,它应该按照喜欢和评论的数量排序,包括没有评论或喜欢的帖子。我被这个问题难住了。如果将其分解为如下子查询 queryset 我得到了大多数评论帖子的排序列表,但它跳过了没有评论的帖子 下面是我的型号 型号 提前感谢:)听起来你需要使用.outerjoin(注释) 默认情况下,JOIN语句执行一个internaljoin,它将删除任何缺少的行。如果执行外部联接,缺少的行将被空值“填充” week = datetime.timedelta(7) toda

我正在尝试创建一个GETAPI返回的帖子列表,它应该按照喜欢和评论的数量排序,包括没有评论或喜欢的帖子。我被这个问题难住了。如果将其分解为如下子查询

queryset

我得到了大多数评论帖子的排序列表,但它跳过了没有评论的帖子 下面是我的型号
型号


提前感谢:)

听起来你需要使用
.outerjoin(注释)

默认情况下,
JOIN
语句执行一个
internaljoin
,它将删除任何缺少的行。如果执行
外部联接
,缺少的行将被
空值“填充”

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"))