2016-07-06 5 views
0

나는 현재 다음 쿼리가 "보낸 사람"을 지정합니다.명시 적으로 테이블

SELECT student.id AS student_id, student.school_id AS student_school_id, student.person_id AS student_person_id, school.id AS school_id, school.name AS school_name 
FROM student, school, person JOIN student AS student_1 ON person.id = student_1.person_id JOIN school AS school_1 ON school_1.id = student_1.school_id 
WHERE person.id = :id_1 

나는 쿼리가 그것이 그대로 유지하고 싶지만 나는 문에서이 Person 모델에서 독점적되고 싶어요. 그래서

SELECT * FROM person JOIN ... WHERE person.id = :id_1 

같은 본인은 aliased kwarg가에서 조건을 엉망으로 생각합니다. aliased kwarg를 제거하면 문제가 해결되지만 특수한 경우에는 별명이 지정된 kwarg가 필요합니다. "FROM"문에서 studentschool 테이블을 제거하려면 어떻게합니까? .join

답변

2

aliased 인수가 Student과 의미, 익명 앨리어싱을 사용 School 당신이 session.query에 전달하면 테이블의 서로 다른 '인스턴스'이다.

from sqlalchemy.orm import aliased 

aliased_student = aliased(Student) 
aliased_school = aliased(School) 

query = (
    session.query(aliased_student, aliased_school) 
    .select_from(Person) 
    .join(aliased_student, Person.student) 
    .join(aliased_school, Student.school) 
    .filter(Person.id == 1)) 

여기에 당신은 당신이 관계로 결합 할 때 사용하는 .join하는 별명을 말할 수있는 것을 볼 수 있습니다.