簡體   English   中英

SQLAlchemy從兩個表中選擇null LEFT JOIN返回空結果

[英]SQLAlchemy select from two tables with null LEFT JOIN returns empty result

我有兩個sql表。 表1(id,name)和表2(id,name,table1_id)

 sql = text('SELECT t1.*, t2.* FROM table1 t1 '
               'LEFT JOIN table2 t2 ON t1.id=t2.table1_id ')
query = db.session.query(Table1, Table2).from_statement(sql).params()
table1_table2_tuple_list = query.all()

如果sql查詢的結果是

67, 'some name', 1, 'some name in table 2', 67

然后一切都好,我有[(<Table1>, <Table2>)] for table1_table2_tuple_list

但是如果sql查詢的結果是:(也是所有其他代碼都是針對此結果)

67, 'some name', Null, Null, Null

然后我收到[(None, None)]而不是接收[(<Table1>, None)] [(None, None)]

如果我稍微改變我的代碼:

sql = text('SELECT t1.*, t2.id, t2.name,t1.id FROM table1 t1 '
               'LEFT JOIN table2 t2 ON t1.id=t2.table1_id ')
query = db.session.query(Table1, Table2, Table1.id).from_statement(sql).params()
table1_table2_tuple_list = query.all()

然后我收到:

[<Table1>, <Table2>, 1]

但在這種情況下,我甚至不確定這是否正確,因為我將sql中的兩列匹配到具有三列的Table2模型。 不知道為什么這是有效的,但一切似乎都到位。 仍然不是我想要的,因為我不想返回到這個查詢並一次又一次地指定新列,如果有這樣的表2

我需要的是一種從純sql中選擇兩個表的方法,並將結果與​​我的模型相匹配。 即使在其中一個表的結果列中沒有值的情況下,我也希望得到結果。 希望我很清楚。 我的目標是接收

[(<Table1>, None)]

當查詢是針對所有列( SELECT t1.*, t2.* )並且存在添加了null的LEFT JOIN時。

問題是您的表具有相同名稱的列。 執行查詢后,SqlAlchemy嘗試按名稱(而不是位置)匹配結果列,並選擇一些匹配的匹配(在這種情況下,表2的SA匹配列與表1的字段相反,反之亦然)。 有一種方法可以指定與.columns()方法的匹配,但我建議你盡可能考慮使用SqlAlchemy的orm-functions ,除非你有充分的理由反對它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM