2012-09-12 72 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