我不明白如何通过交叉联接连接两个表。 Earler,在sqlalchemy 1.1.4版中,我是这样进行的:
A = Table1.sa
B = Table2.sa
my_query = A.query().join(B, literal(True))
但是在更新到1.3版之后,它引发了异常:
sqlalchemy.exc.InvalidRequestError:无法确定要从哪个FROM子句加入,有多个FROMS可以加入该实体。尝试添加显式的ON子句以帮助解决歧义。
我了解这意味着我必须执行以下操作:
my_query = A.query().join(B, A.fireign_key_id = B.id)
但是表A没有表B的外键。
如何通过交叉联接和没有外键连接两个表? 谢谢。
答案 0 :(得分:0)
交叉联接不使用联接条件,因此Table1
和Table2
之间不会有任何ON。在交叉联接中,来自T1
的每一行与来自T2
的所有行联接。您确定要使用交叉联接吗?
答案 1 :(得分:0)
感谢您提供所有答案。引发了异常,因为查询无法确定剩下哪个表,并使用表B的字段进入query(...)。在我明确指示左表之后,该异常消失了。
my_query = A.query(...).join(B, A.id != None)
答案 2 :(得分:0)
进行交叉联接的最简单方法是从两个表中进行选择,而不提供任何用于执行ANSI联接的过滤器:
my_query = session.query(A, B)
这将为您的A和B实体产生笛卡尔乘积(交叉连接),不需要任何解决方法。