2012-09-12 5 views
0

두 SQL 테이블 (메시지, messages_processed), 둘 다 비슷합니다. messages_processed 테이블은 메시지 하나보다 하나의 컬럼을 가지며, 다른 컬럼은 데이터 타입/구조 모두에서 동일합니다. 특정 사용자에 대한 모든 메시지 (처리/일반)를 표시하는 동안이 두 테이블의 통합이 적용되어야합니다.두 개의 유사한 테이블의 Sqlalchemy 통합

Class Message(object): 
    def __init__(self, sender_id, text, user_id): 
    self.sender_id = sender_id 
    self.text = text 
    self.user_id = user_id 
    self.categories = [] #(N:M relation) 
Class MessageProcessed(object): 
    def __init__(self, sender_id, text, user_id, action): 
    self.sender_id = sender_id 
    self.text = text 
    self.user_id = user_id 
    self.categories = [] #(N:M relation) 
    self.action = action 

나는 테이블의 기존 구조를 변경할 수 없습니다. N : M 매핑을 사용하여 orm 객체의 배열을 생성하는 이와 같은 작업을 수행해야합니다. 연합 내의 각 SELECT 문은 동일한 수의 열이 있어야하기 때문에 귀하의 경우에 UNION을 사용할 수 없습니다처럼

session.query(Message).filter(Message.user_id==12) 
         .union(session.query(MessageProcessed) 
            .filter(MessageProcessed.user_id==12)).all() 

답변

0

는 것 같습니다.

+0

감사합니다. 최종 결과에는 조치가 필요하지 않습니다. 노조는 행동을 제외한 다른 모든 분야와 함께 있어야합니다. 간단히 말해서, 결과는 Message의 객체가 될 수 있습니다. – limesoda

+0

쿼리에 문제가 있습니까? 그것은 절대적으로 옳은 것처럼 보인다. – drnextgis

+0

이 오류가 발생합니다. _ CompoundSelect에 전달 된 모든 선택 가능 항목의 열 수가 동일해야합니다. select # 1에는 13 개의 열이 있고 select # 2에는 14_가 있습니다. – limesoda

관련 문제