【发布时间】:2018-05-05 14:51:14
【问题描述】:
我有两个 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
然后不是接收[(<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 匹配。完全不知道为什么这是有效的,但一切似乎都到位了。仍然不是我想要的,因为我不想返回此查询并一次又一次地指定新列(如果 Table2 有这样的列)
我需要的是一种使用纯 sql 从两个表中进行选择并将结果与我的模型相匹配的方法。即使在其中一个表的结果列中没有值的情况下,我也希望得到结果。希望我清楚。我的目标是收到
[(<Table1>, None)]
当查询针对所有列 (SELECT t1.*, t2.*) 并且添加了 LEFT JOIN 时。
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy