Python 将MySQL转换为炼金术
我目前正在尝试使用SQLAlchemy的功能将我编写的MySQL语句转换为 我拥有的是一个表Python 将MySQL转换为炼金术,python,mysql,flask,flask-sqlalchemy,Python,Mysql,Flask,Flask Sqlalchemy,我目前正在尝试使用SQLAlchemy的功能将我编写的MySQL语句转换为 我拥有的是一个表项目,还有一个表用于喜欢的项目。这些包含了类似于该项目的内容。我想得到所有特定的用户项目,并得到相应的like计数 这是MYSQL: SELECT project.id as id, project.name as name, project.description as description, project.user_id as user_id, iFNULL(like_co
项目
,还有一个表用于喜欢的项目
。这些包含了类似于该项目的内容。我想得到所有特定的用户项目,并得到相应的like计数
这是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()
但问题是,如果一个项目没有喜欢的东西,它就不会被退回!显然,它还需要一个左连接,我在这里找不到
有人能帮我翻译一下这句话吗?我相信你正在寻找 所以 变成
.outerjoin(Project, (Project.id == Likes.project_id))
我相信你正在寻找 所以 变成
.outerjoin(Project, (Project.id == Likes.project_id))
我不认为这是正确的,我想要一个正确的连接,因为我想得到所有的项目,如果他们有一个相似的计数,得到外部连接将给所有喜欢加上我的坏项目。我认为select_from关键字可能会有所帮助,但我没有使用它的任何经验。没问题。谢谢你的尝试!我不认为这是正确的,我想要一个正确的连接,因为我想得到所有的项目,如果他们有一个相似的计数,得到外部连接将给所有喜欢加上我的坏项目。我认为select_from关键字可能会有所帮助,但我没有使用它的任何经验。没问题。谢谢你的尝试!我来看看:)