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 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.
> 

-- 
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.

Reply via email to