具有Sqlalchemy的显式交叉连接?

问题描述 投票:0回答:2

可以用SQLalchemy生成显式交叉加入查询,作为以下示例:

SELECT * 
FROM foo 
CROSS JOIN bar

如果是,怎么样?

我会猜测与此类似的东西
session.query(Foo).crossjoin(Bar).all()
python sqlalchemy
2个回答
11
投票

您可以使用内部联接制作笛卡尔产品, 应用条件始终是正确的。 例如。对于Sqlalchemy Orm:

from sqlalchemy.sql.expression import literal

session.query(Foo, Bar).join(Bar, literal(value=True)).all()

现在仅在sqlalchemy中函数(v0.9)。


Sqlalchemy没有明确的方法来指定交叉加入。
恕我直言,所有主要的关系数据库都在您的桌子中有桌子中的桌子时交叉加入,但是它们之间没有加入标准。

我建议使用SQL Expression API而不是SQLalchemy ORM API进行此类任务 - 因此,您将获得结果记录,否则SQLalchemy Orm API将尝试进行对象映射。对于您的例子,我认为Foo和bar是映射的类:
join

请参见Sqlalchemy手册中的示例

3
投票
描述如何使查询生成笛卡尔产品;从地址表在每行中产生来自用户表的每一行:

outerjoin


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.