- changed status to resolved
query(A).join((A_alias, A.somea)).join((B, A.someb)) fails
Issue #1925
resolved
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
assoc_table = Table(
"assoc", Base.metadata,
Column("left_id", ForeignKey("a.id")),
Column("right_id", ForeignKey("a.id"))
)
class A(Base):
__tablename__ = 'a'
id = Column(Integer, primary_key=True)
a_id = Column(Integer, ForeignKey('a.id'))
# fails
some_a = relationship("A", remote_side=id)
# also fails
# some_a = relationship("A",
# primaryjoin=id ==
# assoc_table.c.left_id,
# secondary=assoc_table,
# secondaryjoin=assoc_table.c.right_id ==
# id
# )
some_b = relationship("B")
class B(Base):
__tablename__ = 'b'
id = Column(Integer, primary_key=True)
a_id = Column(Integer, ForeignKey("a.id"))
sess = Session()
AliasedA = aliased(A)
q = sess.query(A)
q = q.join((AliasedA, A.some_a))
q = q.join((B, A.some_b))
print q
Comments (2)
-
reporter -
reporter - removed milestone
Removing milestone: 0.6.5 (automated comment)
- Log in to comment
a fix for these specific cases is in c9125a9efd1beb0f5406568ef05eaeb2b544c00a. We should find time to revisit query.join() yet again and further refine how it decides when adaption of the ON clause should be taking place.