2012-09-12 73 views
0

我有兩個sql表(message,messages_processed),兩者都是相似的。 messages_processed表有一列比消息1多,其他列數據類型/結構在兩者中都相同。在顯示特定用戶的所有消息(處理/常規)時,應該應用這兩個表的聯合。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對象數組。

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

回答

0

看起來你不能在你的情況下使用UNION,因爲UNION中的每個SELECT語句必須具有相同數量的列。

+0

謝謝。最終結果不需要採取行動。除行動外,聯盟應與其他所有領域一起。簡而言之,結果可以是消息的對象。 – limesoda

+0

你有任何查詢問題嗎?它看起來絕對正確。 – drnextgis

+0

我得到這個錯誤:傳遞給CompoundSelect的所有可選項必須具有相同的列數;選擇#1有13列,選擇#2有14_ – limesoda