Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy可以显式交叉连接吗?_Python_Sqlalchemy - Fatal编程技术网

Python 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

是否可以使用SQLAlchemy生成显式交叉连接查询,如下例所示:

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)。所有()
)。