如何在sqlalchemy中左外联接?

时间:2019-03-20 09:52:14

标签: flask sqlalchemy outer-join

我想在sqlalchemy中实现左外部联接。 sql查询是这样的:

select * from skills left join user__skill on user__skill.skill_id=skills.id and  user__skill.user_id=4

我在sqlalchemy中写的是:

skills = db.session.query(Skill, User_Skill.skill_id).\
            outerjoin(User_Skill, User_Skill.skill_id==Skill.id and User_Skill.user_id==4).\
            order_by(Skill.name).all()

但它不会筛选用户并显示所有用户技能。

我怎么写这段代码?

1 个答案:

答案 0 :(得分:1)

编辑: 使用and_中的sqlalchemy加入join条条件

from sqlalchemy import and_

skills = db.session.query(Skill, User_Skill.skill_id).\
            outerjoin(User_Skill, and_(User_Skill.skill_id==Skill.id, 
                                       User_Skill.user_id==4)).\
            order_by(Skill.name).all()

错误的旧答案(不同结果):

使用.filter限制结果。将查询更改为:

skills = db.session.query(Skill, User_Skill.skill_id).\
            outerjoin(User_Skill, User_Skill.skill_id==Skill.id).\
            filter(User_Skill.user_id==4).\
            order_by(Skill.name).all()