как осталось внешнее объединение в sqlalchemy? - PullRequest
1 голос
/ 20 марта 2019

Я хочу реализовать левое внешнее соединение в 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 Ответ

1 голос
/ 20 марта 2019

РЕДАКТИРОВАТЬ: Используйте 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...