joinの関係を定義する必要はありません。 relationshipはマップされたクラスの間にあります。つまり、ORMの概念です。関連するオブジェクトなどのコレクションを持つオブジェクトがあります。結合は、明示的なSQLが必要なときです。
リレーションシップを定義しても、SQL JOIN
節の暗黙的な結合は得られません。これは、既定では遅延であるためです。一方で、関係が関係するオブジェクトをどのように読み込むのか、そして例えば熱心なものを使用するjoinedloadをconfigureにすることができます。
なぜ、誰かがリレーションシップがあっても明示的な結合を使用する理由は、リレーションシップとの結合が必要な集計のようなサーバー側の操作は実行できません。一方、あなたはそれを必要とせず、ORMに完全に満足しているかもしれません。
答えでは、関係にリンクされているため、結合には必要ありません。ターゲットエンティティ(または選択可能)に参加するには、2つの間に外部キー関係が必要です。たとえば、次のように
In [2]: class A(Base):
...: id = Column(Integer, primary_key=True)
...: __tablename__ = 'a'
...:
In [4]: class B(Base):
...: id = Column(Integer, primary_key=True)
...: a_id = Column(Integer, ForeignKey('a.id'))
...: __tablename__ = 'b'
...:
In [6]: print(session.query(B).join(A))
SELECT b.id AS b_id, b.a_id AS b_a_id
FROM b JOIN a ON a.id = b.a_id
関与なしORMの関係定義。