关于SQLAlchemy选择连接目标的问题

关于SQLAlchemy选择连接目标的问题,sqlalchemy,Sqlalchemy,我正在学习SQLAlchemy ORM教程,其中有一部分让我困惑,而不是帮助我: 如果有多个实体,查询将从中选择什么 Query.join方法通常从中最左边的项进行连接 实体列表,当省略ON子句时,或者如果 子句是一个简单的SQL表达式。控制中的第一个实体 连接列表,使用Query.select\u from方法: query=session.queryUser,Address.select_fromAddress.joinUser 实体列表是否为查询中的列表 更重要的是,ON条款什么时候不被省

我正在学习SQLAlchemy ORM教程,其中有一部分让我困惑,而不是帮助我:

如果有多个实体,查询将从中选择什么

Query.join方法通常从中最左边的项进行连接 实体列表,当省略ON子句时,或者如果 子句是一个简单的SQL表达式。控制中的第一个实体 连接列表,使用Query.select\u from方法:

query=session.queryUser,Address.select_fromAddress.joinUser

实体列表是否为查询中的列表

更重要的是,ON条款什么时候不被省略

ON子句是否表示类似于先前定义的User.addresses的关系,例如User.addresses=relationshipAddress,类似于joinUser.addresses?是不是ON子句的类型会阻止我们需要select_from,因为join参数本身会包含确定要与哪个表联接的必要信息


当然,必须有某种方法来指定联接目标,而不让它们总是默认为查询中的第一个表,否则就不可能生成某些复杂的查询。

让我们从头开始。当您将项传递给查询时,它将从这些项生成SELECT语句。如果它们是模型,那么它将枚举此类模型的所有字段。查询将自动添加要从中选择的表

除非您告诉它,否则查询不会自动执行联接,因此您必须添加要从中查找值的表。像join这样的附加子句告诉查询应该如何执行join操作

要连接的其他参数将用作ON子句,否则查询将根据映射器定义的关系推断子句

总之,只要不指定要连接的其他参数,就会省略ON子句。在下面的表达式中,省略了ON子句:queryUser,Address.joinAddress这并不意味着发出的SQL没有ON子句;它将通过使用模型上定义的关系推断适当的ON子句来做正确的事情


当存在多种可能性时,您需要自己指定子句:queryPerson.joinPerson.parent1.joinPerson.parent2应生成一个返回一个人及其双亲的查询。在这种情况下,ON子句没有被省略。

让我们从头开始。当您将项传递给查询时,它将从这些项生成SELECT语句。如果它们是模型,那么它将枚举此类模型的所有字段。查询将自动添加要从中选择的表

除非您告诉它,否则查询不会自动执行联接,因此您必须添加要从中查找值的表。像join这样的附加子句告诉查询应该如何执行join操作

要连接的其他参数将用作ON子句,否则查询将根据映射器定义的关系推断子句

总之,只要不指定要连接的其他参数,就会省略ON子句。在下面的表达式中,省略了ON子句:queryUser,Address.joinAddress这并不意味着发出的SQL没有ON子句;它将通过使用模型上定义的关系推断适当的ON子句来做正确的事情

当存在多种可能性时,您需要自己指定子句:queryPerson.joinPerson.parent1.joinPerson.parent2应生成一个返回一个人及其双亲的查询。在这种情况下,ON子句没有被省略