2012-04-11 2 views
0

SQL Alchemy를 사용하고 있으며 문서 ID 목록을 반환하고 싶습니다. ID는 문서 테이블의 기본 키입니다. 현재 쿼리에서 튜플 목록을 반환합니다. 나는 (userDocs) IN_ 사용하여 다른 테이블을 검색 할 수 있도록SQL Alchemy는 ID 목록을 반환합니다.

userDocs = session.query(Document.idDocument).filter(Document.User_idUser == user.idUser).all() 

내가 ID의 목록을 원하는 이유입니다.

다른 솔루션은 튜플을 사용하여 검색 할 수 있습니다. 현재 userDocs를 사용하여 두 번째 쿼리에서 아무 것도 반환하지 않습니다.

감사합니다.

답변

2

중간 쿼리를 수행 할 필요가 없습니다.이 모든 것을 한 번에 수행 할 수 있습니다!

things = session.query(Things) \ 
       .join(Thing.documents) \ 
       .filter(Document.User_idUser==user.idUser) 

당신은 의도 된 기업에 자사의 relationship()을 통해 문서의 속성을 쿼리합니다.

+0

@TokenMacGuy에 동의합니다 :'Document' 테이블에'join'을 추가하고'filter'를 추가하여 두 번째 쿼리를 확장해야합니다. 이 방법으로 하나의 쿼리 (하나의'SQL' 문)에서 결과를 얻을 수 있습니다. 'Thing'과'Document' 사이에 '관계'가 없더라도 명시적인 조건으로 '결합'할 수 있습니다. 'IN'연산자가 일반적으로 차선책 일 수 있음은 말할 것도 없습니다 (http://stackoverflow.com/questions/1013797/is-sql-in-bad-for-formformance) – van

+0

감사합니다. 완벽하게, 그것의 관계를 필터로 사용하는 것을 생각하지 않았습니다. 중첩 된 쿼리를 사용하여 실험을 시도했지만 잘되지는 않았지만 이것이 가장 좋은 방법 인 것 같습니다. 감사! –

+0

당신이 쿼리 (Things) .join (Thing.documents) .filter (Document.User_idUser == user.idUser)를 의미한다고 생각한다면, Thing.documents에서 직접 다음 엔티티로 이동할 수 없습니다 (SQLA는 암시 적으로 조인하지 않습니다)) – zzzeek