这条 SQL 语句怎么转换成 SQLAchemy 代码?

发布于 2022-09-11 22:53:35 字数 1876 浏览 18 评论 0

问题描述

想问下怎么把我的 SQL 语句转换成 SQLAchemy 的形式?
想写一个推荐版块,暂时想到用 favorite 收藏表,like 点赞表,topic 帖子表,reply 评论表四个表连接起来,按 topic.id 进行分组;分完组后统计收藏,点赞,帖子,评论的数量,然后做倒序排列

问题出现的环境背景及自己尝试过哪些方法

写出了 SQL 语句,但是 SQLAlchemy 的文档看不太懂,无法自己转换成 SQLAlchemy 代码。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
写出来的 SQL 语句如下:

SELECT 
    t.id,
    t.views,
    t.title,
    t.content,
    t.user_id,
    t.movie_id,
    t.board_id,
    r.id AS reply_id,
    COUNT(r.id) AS reply_count,
    COUNT(f.id) AS favorite_count,
    COUNT(l.id) AS like_count,
    COUNT(r.id)+COUNT(f.id)+COUNT(l.id) as all_count
FROM
    web21.topic t
        LEFT JOIN
    web21.reply r ON t.id = r.topic_id
        LEFT JOIN
    web21.favorite f ON t.id = f.topic_id
        LEFT JOIN
    web21.like l ON t.id = l.topic_id
GROUP BY t.id
ORDER BY all_count DESC;
@main.route("/")
def index():
    board_id = int(request.args.get('board_id', 1))
    page = request.args.get('page', 1, type=int)
    recommended = 1
    if board_id == recommended:
        # 这里放 SQLAlchemy Query 语句
    else:
        paginate = Topic.query \
            .filter_by(board_id=board_id) \
            .order_by(Topic.created_time.desc()) \
            .paginate(page, 10)
    ms = paginate.items
    token = new_csrf_token()
    bs = Board.all()
    u = current_user()
    s = forum_status()
    return render_template("topic/index.html",
                           ms=ms,
                           token=token,
                           bs=bs,
                           bid=board_id,
                           user=u,
                           paginate=paginate,
                           status=s,
                           )

你期待的结果是什么?实际看到的错误信息又是什么?

想要用 SQLAlchemy ORM 来实现推荐版块的排序。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文