![](/img/trans.png)
[英]Converting a query with built-in MySQL functions to 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.