- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有两个 sql 表。表1(id,name)和表2 with(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>)]
对于 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.*
) 并且存在添加了 null 的 LEFT JOIN 时。
最佳答案
问题是您的表中有同名的列。执行查询后,SqlAlchemy 尝试按名称(而不是按位置)匹配结果列,并选择一些适合的匹配(在本例中,SA 将 table2 的列与 Table1 的字段匹配,反之亦然)。有一种方法可以指定匹配 .columns() method但我建议你考虑使用 orm-functions除非您有充分的理由反对,否则尽可能使用 SqlAlchemy。
关于python - SQLAlchemy 从两个具有空 LEFT JOIN 的表中选择返回空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50142629/
我有一个名为 FeedView 的 View ,由 FeedViewController 处理。 我还有一个名为“NearestStore”的 XIB,它由一个名为“NearestStoreViewC
我有一个警报表,其中 tr 元素是使用 JS 动态添加/删除的。问题是它有一个 border-top 将它与上面的内容分开,当表格为空时我想隐藏这些内容。我试过 :empty 和 display:no
我是一名优秀的程序员,十分优秀!