I have a column_property on a polymorphic base class. When I joinedload/subqueryload a derived class the colum_property makes the query fail.
class A(Base): __tablename__ = "a" id = Column(Integer, primary_key=True) type = Column(String(40), nullable=False) __mapper_args__ = {'polymorphic_on': type} A.anything = orm.column_property(A.id + 1000) class B(A): __tablename__ = "b" account_id = Column(Integer, ForeignKey('a.id'), primary_key=True) x_id = Column(Integer, ForeignKey('x.id'), nullable=False) __mapper_args__ = {'polymorphic_identity': 'named'} class X(Base): __tablename__ = "x" id = Column(Integer, primary_key=True) b = orm.relationship("B" Calling: print Session.query(X).options(joinedload("b")) produces: SELECT x.id AS x_id, anon_1.a_id AS anon_1_a_id, anon_1.a_type AS anon_1_a_type, a.id + %(id_1)s AS anon_2, anon_1.b_account_id AS anon_1_b_account_id, anon_1.b_x_id AS anon_1_b_x_idFROM a, xLEFT OUTER JOIN (SELECT a.id AS a_id, a.TYPE AS a_type, b.account_id AS b_account_id, b.x_id AS b_x_id FROM a JOIN b ON a.id = b.account_id) AS anon_1 ON x.id = anon_1.b_x_id It seems that the "a.id + %(id_1)" should changed to "anon_1.a_id" and "a" removed from "FROM" or better "a.id + %(id_1)s" should be moved into the sub select named anon_1. This is probably what you want if the column_property was actually a subselect itself (which is want I'm actually trying to do). Am I correct in thinking that this corner case simply isn't supported yet? Or is it a bug? Or am I doing something wrong? Actually the above query doesn't fail outright. Although it does create a unsuspecting join. But if the column_property instead was something like class subA(Base): __tablename__ = "subA" id = Column(Integer, primary_key=True) a_id = Column(Integer, ForeignKey('a.id'), nullable=False) value = Column(Integer, nullable=False) A.anything = orm.column_property( select([func.sum(subA.value)], subA.a_id==A.id)) Then the sql would be: SELECT x.id AS x_id, anon_1.a_id AS anon_1_a_id, anon_1.a_type AS anon_1_a_type, (SELECT sum("subA".value) AS sum_1 FROM "subA" WHERE "subA".a_id = a.id) AS anon_2, anon_1.b_account_id AS anon_1_b_account_id, anon_1.b_x_id AS anon_1_b_x_idFROM xLEFT OUTER JOIN (SELECT a.id AS a_id, a.TYPE AS a_type, b.account_id AS b_account_id, b.x_id AS b_x_id FROM a JOIN b ON a.id = b.account_id) AS anon_1 ON x.id = anon_1.b_x_id Which naturally doesn't work at all, since "a.id" inside the first subselect doesn't refer to anything. PS: I have no idea how this email is going to get formatted, please let me know if it is impossible to read. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To view this discussion on the web visit https://groups.google.com/d/msg/sqlalchemy/-/1CSullHjqPMJ. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.