如何在 sqlalchemy 中左外连接?

how left outer join in sqlalchemy?

我想在 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()

但它不会过滤用户并显示所有用户的技能。

我该如何编写这段代码?

编辑: 使用来自sqlalchemyand_加入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()