Awesome Mike thanks, sorry for the delay writing this, I didn't get an update for some reason! Much appreciated.
On May 19, 5:06 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > this issue is fixed, you can download the tip of 0.6 or 0.7 in the > "development versions" section at: > > http://www.sqlalchemy.org/download.html > > On May 19, 2011, at 11:49 AM, Michael Bayer wrote: > > > > > > > > > this is a bug tickethttp://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 > >> athttp://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 > > athttp://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.