0

在我的查询中使用许多与左外连接相关的表,我想知道是否有任何方法可以轻松地将查询结果作为基本数组,例如在 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
4

1 回答 1

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()
于 2013-01-12T20:30:28.453 回答