Python sqlalchemy 1.3中的交叉连接

Python sqlalchemy 1.3中的交叉连接,python,sqlalchemy,Python,Sqlalchemy,我不明白如何用交叉连接连接两个表。 Earler,在sqlalchemy 1.1.4版中,我是这样做的: A = Table1.sa B = Table2.sa my_query = A.query().join(B, literal(True)) 但升级到1.3版后,出现了raise异常: sqlalchemy.exc.InvalidRequestError:无法确定从哪个FROM子句加入,有多个FROM可以加入此实体。尝试添加一个显式ON子句以帮助解决歧义 我明白这意味着我必须做这样的事

我不明白如何用交叉连接连接两个表。 Earler,在sqlalchemy 1.1.4版中,我是这样做的:

A = Table1.sa 
B = Table2.sa
my_query = A.query().join(B, literal(True))
但升级到1.3版后,出现了raise异常:

sqlalchemy.exc.InvalidRequestError:无法确定从哪个FROM子句加入,有多个FROM可以加入此实体。尝试添加一个显式ON子句以帮助解决歧义

我明白这意味着我必须做这样的事情:

my_query = A.query().join(B, A.fireign_key_id = B.id)
但是表A没有表B的外键

如何使用交叉连接和不使用外键连接两个表?
谢谢。

交叉连接不使用连接条件,因此
表1
表2
之间不能有任何连接。在交叉连接中,
T1
中的每一行与
T2
中的所有行连接。您确定要使用交叉联接吗?

谢谢您的回答。异常被引发,因为查询无法确定哪个表是左表,而查询(…)使用表B的字段。在我明确指出左表后,此异常消失

my_query = A.query(...).join(B, A.id != None)

进行交叉联接的最简单方法是从两个表中进行选择,而不提供任何筛选器来执行ANSI联接:

my_query = session.query(A, B)

这将生成a和B实体的笛卡尔积(交叉联接),不需要任何解决方法。

join foo ON true
实际上是一个交叉联接,但不是显式编写的。交叉联接本身不应用任何谓词来过滤联接表中的行。交叉连接的结果可以通过使用WHERE子句进行过滤,然后WHERE子句可以生成与内部连接等效的结果。好的,我们也可以用ON代替WHERE,结果是一样的,但是为了什么?请注意“有效”这个词。上述内部联接的结果与交叉联接产生的关系完全相同,并且还可以使用
WHERE
子句进一步选择结果。另一方面,简单的方法是仅以SQL-92之前的样式列出FROM项。请添加模型
A
B
,或
表1.sa
等的定义。