this is a bug ticket http://www.sqlalchemy.org/trac/ticket/2169, ill have a fix committed in a few minutes.
On May 19, 2011, at 5:20 AM, boothead wrote: > Hi, > > I have a declarative class that I'd like to be able to add an > attribute to: (please ignore the eye burning capitals - it's an > existing schema :-) ) > > class Schedule(Base): > __tablename__ = "SomeSchedule" > __table_args__ = ( > dict(schema="Schedule", useexisting=True) > ) > > def __str__(self): > return "%s %s to %s" % (self.Name, self.Start, self.End) > > query = Session.query_property() > > id = Column(Integer, primary_key=True) > NameId = Column(Integer, ForeignKey("reference.name.id"), > nullable=False) > Value = Column(Integer, nullable=False) > Start = Column(Date, nullable=False) > End = Column(Date, nullable=False) > > On instances of this class I would like an attribute NextValue which > would be the Value column of the row in the table where self.id == > next.id and self.End == next.Start > > So do I use a column_property like: > > rs1 = Schedule.__table__.alias('rs1') > rs2 = Schedule.__table__.alias('rs2') > > next_val_select = select([rs2.c.Value], from_obj=[rs1.join(rs2, > rs1.c.NameId==rs2.c.NameId)])\ > .where(rs1.c.End==rs2.c.Start) > > RollSchedule.NextContract = column_property(next_contract_select) > > This gets me almost there, but the from clause in the main select is > aliased to rs2 which means that the columns are messed up: > > SELECT [RollSchedule_1].id AS [Schedule_RollSchedule_id], > [RollSchedule_1].[NameId] AS [Schedule_RollSchedule_NameId], > [RollSchedule_1].[Contract] AS [Schedule_RollSchedule_Contract], > [RollSchedule_1].[Start] AS [Schedule_RollSchedule_Start], > [RollSchedule_1].[End] AS [Schedule_RollSchedule_End], (SELECT name_1. > [stringId] > FROM reference.name AS name_1 > WHERE name_1.id = [RollSchedule_1].[NameId]) AS anon_1, (SELECT rs2. > [Contract] > FROM [Schedule].[RollSchedule] AS rs1 JOIN [Schedule].[RollSchedule] > AS rs2 ON rs1.[NameId] = rs2.[NameId] > WHERE rs1.[End] = rs2.[Start]) AS anon_2 > FROM [Schedule].[RollSchedule] AS rs2 > > > Or should I do it more like this: > > RollSchedule.NextRolls = relationship(Schedule, > > primaryjoin=(Schedule.NameId==Schedule.NameId) & > (Schedule.End==Schedule.Start), > foreign_keys=[Schedule.NameId], > # lazy="joined", > join_depth=2) > > and have an assocaition_proxy. > > The query I'm looking for is: > > SELECT rs."NameId", rs."Contract", rs."Start", rs."End", > ( > SELECT reference.name."stringId" > FROM reference.name > WHERE reference.name.id = rs."NameId") AS anon_1, > ( > SELECT rs1."Contract" > FROM "Schedule"."RollSchedule" rs1 > JOIN "Schedule"."RollSchedule" rs2 > ON rs1.nameId = rs2.nameId > WHERE rs2."End" = rs1."Start" and rs.id = rs2.id > ) AS anon_2 > FROM "Schedule"."RollSchedule" rs > > > Thanks in advance > Ben > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > 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. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. 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.