繁体   English   中英

将MySQL转换为Flask-SQLAlchemy

[英]Converting MySQL into Flask-SQLAlchemy

我目前正在尝试使用SQLAlchemy的功能将我编写的MySQL语句转换为

我所拥有的是一个表Project ,一个用于Likes 这些包含项目的赞。 我想获得所有特定的用户项目,并获得相应的喜欢计数。

这是MYSQL:

SELECT project.id as id, project.name as name, 
   project.description as description, 
   project.user_id as user_id, 
   iFNULL(like_count,0) as like_count,
   project.created_on
   FROM milo.project LEFT JOIN (
       SELECT COUNT(*) as like_count, project_id 
           FROM milo.likes 
           GROUP BY project_id
   ) counting 
ON counting.project_id = milo.project.id 
WHERE (milo.project.user_id = 1) 
ORDER BY project.created_on

因此,这将表Project连接到通过查询创建的另一个表,该查询计算该项目的喜欢

此查询获得“ Like计数:

res = db.session.query(func.count(likes.Likes.project_id), project.Project) \
        .join(project.Project, (likes.Likes.project_id == project.Project.id)) \
        .group_by(likes.Likes.project_id)

该查询获取用户项目:

user_projects = Project.query.filter_by(user_id=1).all()

我最接近的是:

projects = db.session.query(func.count(Likes.project_id), Project) \
        .join(Project, (Project.id == Likes.project_id)) \
        .filter(Likes.user_id == user.id) \
        .group_by(Likes.project_id).order_by(Project.created_on.desc()) \
        .all()

但是,与此有关的问题是,如果一个项目没有喜欢,则不会返回该项目! 显然,它还需要一个“左连接”,我在这里找不到。

有人可以帮忙翻译此声明吗?

我相信您正在寻找externaljoin

所以

.join(Project, (Project.id == Likes.project_id)) \

.outerjoin(Project, (Project.id == Likes.project_id))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM