its impossible to know what you want without seeing literal SQL but this
is the general idea
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class USCity(Base):
__tablename__ = 'cities'
id = Column(Integer, primary_key=True)
name = Column(String(50))
@property
def zipcode_meta(self):
return object_session(self).query(USZipCode.city_id,
USZipCode.population,
USZipCode.avg_house_value).filter(USZipCode.city_id==self.city_id)
class USZipCode(Base):
__tablename__ = 'zipcodes'
id = Column(Integer, primary_key=True)
city_id = Column(Integer, ForeignKey('cities.id'))
zip = Column(String(12))
population = Column('population', Integer)
avg_house_value = Column('avg_house_value', Integer)
indigophone wrote:
>
> I gave it a shot but I am no closer to knowing how to do this.
>
> On Nov 19, 12:00 am, Michael Bayer <[EMAIL PROTECTED]> wrote:
>> joining to a subquery is better accomplished outside of relation()
>> using query, such as query(USZipCode).join((subquery,
>> subquery.c.col==USZipCode.somecol)).
>>
>> Now you want it as an attribute on your class. Do it like this:
>>
>> class USCity(object):
>> ...
>>
>> [EMAIL PROTECTED]
>> def zipcode_meta(self):
>> return object_session(self).query(USZipCode).join(...join
>> criterion...).params(..whatever...)
>>
>> The advantage to this is that you can formulate the query and its
>> relation to the parent in exactly the way you need.
>>
>> On Nov 18, 2008, at 9:34 PM, indigophone wrote:
>>
>>
>>
>> > zipcode_meta_join_subquery = session.query(us_zipcode_table.c.city_id,
>> > us_zipcode_table.c.zipcode_population,
>> > us_zipcode_table.c.average_house_value).group_by(us_zipc
>> > ode_table.c.city_id).subquery()
>>
>> > mapper(USCity, us_city_table, properties={
>> > 'state':relation(USState, backref=backref('cities')),
>> > 'zipcode_meta':relation(USZipCode, primaryjoin=
>> > (zipcode_meta_join_subquery,
>> > zipcode_meta_join_subquery.c.city_id==us_city_table.c.city_id))
>> > })
>>
>> > The above code obviously doesn't work. How do I add a join to the
>> > above subquery in my mapper?
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---