Python SQLAlchemy可以显式交叉连接吗?
是否可以使用SQLAlchemy生成显式交叉连接查询,如下例所示:Python SQLAlchemy可以显式交叉连接吗?,python,sqlalchemy,Python,Sqlalchemy,是否可以使用SQLAlchemy生成显式交叉连接查询,如下例所示: SELECT * FROM foo CROSS JOIN bar 如果是,怎么做 我猜是类似的 session.query(Foo).crossjoin(Bar).all() SQLAlchemy没有明确的方法来指定交叉连接。 当FROM子句中有表,但它们之间没有联接条件时,所有主要关系数据库都会进行交叉联接 我建议对这样的任务使用SQL表达式API而不是SQLAlchemy ORM API,这样您将得到结果记录,否则S
SELECT *
FROM foo
CROSS JOIN bar
如果是,怎么做
我猜是类似的
session.query(Foo).crossjoin(Bar).all()
SQLAlchemy没有明确的方法来指定交叉连接。 当FROM子句中有表,但它们之间没有联接条件时,所有主要关系数据库都会进行交叉联接 我建议对这样的任务使用SQL表达式API而不是SQLAlchemy ORM API,这样您将得到结果记录,否则SQLAlchemy ORM API将尝试进行对象映射。对于您的示例,我假设Foo和Bar是映射类:
connection.execute(select[Foo.__table__,Bar.__table__])
请参见描述如何使查询生成笛卡尔积;根据地址表中的每一行生成用户表中的每一行:
>>> for row in conn.execute(select([users, addresses])):
... print row
SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users, addresses
()
你可以用内连接做笛卡尔积, 应用条件总是正确的。 例如,对于SQLAlchemy ORM:
from sqlalchemy.sql.expression import literal
session.query(Foo, Bar).join(Bar, literal(True)).all()
SQLAlchemy(v0.9)中目前只有
join
和outerjoin
函数。注意literal(True)
上的显式连接现在在SQL Alchemy 1.3下不起作用(请求on子句时抛出错误),尽管@vvladymyrov概述的概念仍然有效(基本上session.query(Foo,Bar)。所有()
)。