如何在 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()
但它不会过滤用户并显示所有用户的技能。
我该如何编写这段代码?
编辑:
使用来自sqlalchemy
的and_
加入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()
我想在 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()
但它不会过滤用户并显示所有用户的技能。
我该如何编写这段代码?
编辑:
使用来自sqlalchemy
的and_
加入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()