让SqlAlchemy将查询结果作为一个数组加入(或类似于sthg)

时间:2013-01-11 17:36:01

标签: sqlalchemy

在我的查询中使用与左外连接相关的许多表, 我想知道是否有任何方法可以轻松地将查询结果作为基本数组,例如phpmyadmin中可以预期的类型(我不是指布局)。

给定3个表,所有表都被映射,我目前只得到第一个表的结果作为对象,如果table2有任何结果,我必须从中逐行测试,依此类推表3:

list_res_table1 = DBSession.query(table1).outerjoin(table2).outerjoin(table3).all()  
for res_table1 in list_res_table1:  
    if res_table1.relationship_to_table2:
        list_res_table2 = res_table1.relationship_to_table2
        for res_table2 in list_res_table2:  
            if res_table2.relationship_to_table3:
                etc.

获取可直接访问的对象列表会很棒:

((table1, table2, None)    #=> no result for table3  
(table1, None, None)      #=> no result for table2  
(table1, table2, table3))  #=> results for all tables

1 个答案:

答案 0 :(得分:2)

你可以(当然应该)直接查询:

list_res_table1 = DBSession.query(table1, table2, table3).outerjoin(table2).outerjoin(table3).all()

加入将首先查看最左边的表。如果您需要更多特异性,可以添加select_from()以及显式ON子句:

list_res_table1 = DBSession.query(table1, table2, table3).\
                      select_from(table1).\
                      outerjoin(table2, table2.c.id==table1.c.t2id).\
                      outerjoin(table3, table2.c.t3id==table3.c.id).all()