0

私のクエリで左外部結合に関連する多くのテーブルを使用して、たとえばphpmyadminで期待できるタイプの基本的な配列としてクエリ結果を簡単に取得する方法があるかどうか疑問に思います(レイアウトを意味するものではありません)。

3 つのテーブルがあり、すべてのテーブルがマップされている場合、現在、最初のテーブルの結果のみをオブジェクトとして取得します。そこから、テーブル 2 の結果があるかどうかを行ごとにテストする必要があり、テーブル 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 に答える