[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread Michael Bayer
page 199 of the SQLAlchemy oreilly book talks about association proxy ;)



On Feb 25, 2009, at 6:12 PM, Stephen Telford wrote:

> Okay, that sounds like a plan but., not to sound too much like a  
> broken record, does anyone have an -actual- example ? looking at  
> pages with a lot of API's is not really going to help me too much :(
>
> This maybe slightly off-topic and it's really NOT meant as flamebait  
> but.. I remember a while ago playing around with DBIx (the perl ORM)  
> and one of the things that -really- made it easy to get to grips  
> with as the DBIx::Cookbook. It maybe a good idea to fling something  
> similiar into the sqlalchemy documentation...
>
> if I had more experience I would write it but.. yes. It definitely  
> is the quickest ORM I have seen/used, but, all the speed is for  
> naught if you hit the 20% wall.
>
> Regards
> Stef
>
> On Wed, Feb 25, 2009 at 4:21 PM, Michael Bayer  > wrote:
> check out the association proxy extension if you're looking to have  
> "Bar" be "hidden" as an association object.   it will ultimately use  
> Foo/Bar for querying but attribute access would be proxied through  
> the names you confgure.
>
>
> On Feb 25, 2009, at 4:11 PM, Stephen Telford wrote:
>
>> Hello Az,
>> Yes, Bar is the association table of Foo to Foo. In essence,  
>> this is a self join through a join table.. I have tried and hit my  
>> head on this for (quite literally) hours. In the end, and for the  
>> record, I ended up creating a method on the model itself such as ;
>>
>> def children(self):
>> childFoo=Foo.__table__.alias()
>> return  
>> object_session(self).query(Foo).filter(and_(childFoo.c.deleted ==  
>> 0, childFoo.id <> self.id, self.id == Bar.parent_id))
>>
>> Not the prettiest way, nor what I would expect, but in lieu of  
>> an actual example, and to help anyone who ends up treading the same  
>> path as me, I hope this helps.
>>
>> Regards
>> Stef
>>
>> On Wed, Feb 25, 2009 at 4:29 AM,  wrote:
>>
>> u mean, the Bar is an association table of Foo to Foo?
>> u have to use secondary_table and/or secondary_join in the relation
>> setup. And probably specify remote_side or it may not know which Foo
>> is what.
>>
>> On Wednesday 25 February 2009 03:39:20 Stef wrote:
>> > Hello Everyone,
>> >First of all, kudos on SQLAlchemy.. the speed is pretty amazing
>> > - I am coming from the SQLObject world and there is a definite
>> > difference. Excellent work. I am also getting to grips with it
>> > pretty quickly, using object_session and all that good stuff. This
>> > said, I have hit that 20% problem, and am hoping someone can shine
>> > a light on it.
>> >
>> >I have a table, lets call it Foo and another table Bar. Foo
>> > should be able to get a list of it's parents via Bar or it's
>> > children via Bar. I am also using the declarative_base system
>> > rather than table/ mapper defined seperately.
>> >
>> >class Foo(Base):
>> > id = Column(Integer, primary_key=True)
>> >
>> >class Bar(Base):
>> > parent_id = Column(Integer, default=0)
>> > child_id = Column(Integer, default=0)
>> >
>> >So, I thought something like ; children = relation(Foo,
>> > backref=backref('parents'), primaryjoin=and_(Foo.id==Bar.parent_id)
>> >
>> >But that's where I hit the 'wall' as it were, is there a way to
>> > setup a synonym for Foo in the primaryjoin clause ? Am I missing
>> > something stupid ? (I am okay with that ;)
>> >
>> >Regards
>> >Stef
>> >
>>
>>
>>
>>
>>
>>
>
>
>
>
>
> >


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



[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread Stephen Telford
and of course, both the passwords -are- the same (duh ;) .. the 'get()'
works fine (obviously ;)

Regards
Stef

On Wed, Feb 25, 2009 at 7:53 PM, Stephen Telford wrote:

> Thank you Bobby!! That does make things more easier, and it shows then that
> I am being a -real- moron here..
>
> from sqlalchemy import *
> from sqlalchemy.orm import sessionmaker, mapper, relation
>
> meta = MetaData()
> meta.bind = 'postgres://root:sxta...@192.168.2.198/compass_master'
>
> engine = create_engine('postgres://
> root:mypassw...@192.168.2.198/compass_master', echo=True)
> Session = sessionmaker(bind=engine)
> session = Session()
>
>
> trip_table = Table('trip', meta, autoload=True)
> class Trip(object):
>id = Column(Integer, primary_key=True)
> trip = mapper(Trip, trip_table)
>
> trip_pc_table = Table('trip_parent_child', meta, autoload=True)
> class TripParentChild(object):
>parent_id = Column(Integer, ForeignKey('Trip.id'), nullable=False)
>parent = relation(Trip)
>child_id = Column(Integer, ForeignKey('Trip.id'), nullable=False)
>child = relation(Trip)
> trip_pc = mapper(TripParentChild, trip_pc_table)
>
> Trip.children = relation(Trip, secondary = trip_table, primaryjoin =
> TripParentChild.parent_id == Trip.id, secondaryjoin=TripParentChild.child_id
> == Trip.id)
> Trip.parent = relation(Trip, secondary = trip_table, primaryjoin =
> TripParentChild.child_id == Trip.id, secondaryjoin=TripParentChild.parent_id
> == Trip.id)
>
> s = session.query(Trip).get(194143)
> print s.children
>
> results in a very nice stack trace;
>
> Traceback (most recent call last):
>   File "./s.py", line 37, in 
> print s.children
>   File
> "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/properties.py",
> line 628, in __str__
> return str(self.parent.class_.__name__) + "." + self.key
> AttributeError: 'RelationProperty' object has no attribute 'parent'
>
>
> Any thoughts ? I suspect some attempt at 'black magic' in regards to the
> parent_id
>
> Regards
> Stef
>
>
>
> On Wed, Feb 25, 2009 at 7:05 PM, Bobby Impollonia wrote:
>
>>
>> I am doing something similar. The following code works for me in SQLA .4.8
>> class Foo(Base):
>>__tablename__ = 'foo'
>> id = Column(Integer, primary_key=True)
>>
>> bar_table = Table('bar', Base.metadata,
>>Column('parent_id', Integer, ForeignKey('foo.id'), nullable=False),
>>Column('child_id', Integer, ForeignKey('foo.id'), nullable=False))
>>
>> Foo.children = relation(Foo, secondary = bar_table, primaryjoin =
>> bar_table.c.parent_id == Foo.id, secondaryjoin=bar_table.c.child_id ==
>> Foo.id, backref='parents')
>>
>> On Wed, Feb 25, 2009 at 3:12 PM, Stephen Telford 
>> wrote:
>> > Okay, that sounds like a plan but., not to sound too much like a broken
>> > record, does anyone have an -actual- example ? looking at pages with a
>> lot
>> > of API's is not really going to help me too much :(
>> >
>> > This maybe slightly off-topic and it's really NOT meant as flamebait
>> but.. I
>> > remember a while ago playing around with DBIx (the perl ORM) and one of
>> the
>> > things that -really- made it easy to get to grips with as the
>> > DBIx::Cookbook. It maybe a good idea to fling something similiar into
>> the
>> > sqlalchemy documentation...
>> >
>> > if I had more experience I would write it but.. yes. It definitely is
>> the
>> > quickest ORM I have seen/used, but, all the speed is for naught if you
>> hit
>> > the 20% wall.
>> >
>> > Regards
>> > Stef
>> >
>> > On Wed, Feb 25, 2009 at 4:21 PM, Michael Bayer <
>> mike...@zzzcomputing.com>
>> > wrote:
>> >>
>> >> check out the association proxy extension if you're looking to have
>> "Bar"
>> >> be "hidden" as an association object.   it will ultimately use Foo/Bar
>> for
>> >> querying but attribute access would be proxied through the names you
>> >> confgure.
>> >>
>> >> On Feb 25, 2009, at 4:11 PM, Stephen Telford wrote:
>> >>
>> >> Hello Az,
>> >> Yes, Bar is the association table of Foo to Foo. In essence, this
>> is a
>> >> self join through a join table.. I have tried and hit my head on this
>> for
>> >> (quite literally) hours. In the end, and for the record, I ended up
>> creating
>> >> a method on the model itself such as ;
>> >>
>> >> def children(self):
>> >> childFoo=Foo.__table__.alias()
>> >> return
>> >> object_session(self).query(Foo).filter(and_(childFoo.c.deleted == 0,
>> >> childFoo.id <> self.id, self.id == Bar.parent_id))
>> >>
>> >> Not the prettiest way, nor what I would expect, but in lieu of an
>> >> actual example, and to help anyone who ends up treading the same path
>> as me,
>> >> I hope this helps.
>> >>
>> >> Regards
>> >> Stef
>> >>
>> >> On Wed, Feb 25, 2009 at 4:29 AM,  wrote:
>> >>>
>> >>> u mean, the Bar is an association table of Foo to Foo?
>> >>> u have to use secondary_table and/or secondary_join in the relation
>> >>> setup. And probably specify remote_side or it may not know which Foo
>> >>> is what.
>> >>>
>> >

[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread Stephen Telford
Thank you Bobby!! That does make things more easier, and it shows then that
I am being a -real- moron here..

from sqlalchemy import *
from sqlalchemy.orm import sessionmaker, mapper, relation

meta = MetaData()
meta.bind = 'postgres://root:sxta...@192.168.2.198/compass_master'

engine = create_engine('postgres://
root:mypassw...@192.168.2.198/compass_master', echo=True)
Session = sessionmaker(bind=engine)
session = Session()


trip_table = Table('trip', meta, autoload=True)
class Trip(object):
   id = Column(Integer, primary_key=True)
trip = mapper(Trip, trip_table)

trip_pc_table = Table('trip_parent_child', meta, autoload=True)
class TripParentChild(object):
   parent_id = Column(Integer, ForeignKey('Trip.id'), nullable=False)
   parent = relation(Trip)
   child_id = Column(Integer, ForeignKey('Trip.id'), nullable=False)
   child = relation(Trip)
trip_pc = mapper(TripParentChild, trip_pc_table)

Trip.children = relation(Trip, secondary = trip_table, primaryjoin =
TripParentChild.parent_id == Trip.id, secondaryjoin=TripParentChild.child_id
== Trip.id)
Trip.parent = relation(Trip, secondary = trip_table, primaryjoin =
TripParentChild.child_id == Trip.id, secondaryjoin=TripParentChild.parent_id
== Trip.id)

s = session.query(Trip).get(194143)
print s.children

results in a very nice stack trace;

Traceback (most recent call last):
  File "./s.py", line 37, in 
print s.children
  File
"/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/properties.py",
line 628, in __str__
return str(self.parent.class_.__name__) + "." + self.key
AttributeError: 'RelationProperty' object has no attribute 'parent'


Any thoughts ? I suspect some attempt at 'black magic' in regards to the
parent_id

Regards
Stef


On Wed, Feb 25, 2009 at 7:05 PM, Bobby Impollonia  wrote:

>
> I am doing something similar. The following code works for me in SQLA .4.8
> class Foo(Base):
>__tablename__ = 'foo'
> id = Column(Integer, primary_key=True)
>
> bar_table = Table('bar', Base.metadata,
>Column('parent_id', Integer, ForeignKey('foo.id'), nullable=False),
>Column('child_id', Integer, ForeignKey('foo.id'), nullable=False))
>
> Foo.children = relation(Foo, secondary = bar_table, primaryjoin =
> bar_table.c.parent_id == Foo.id, secondaryjoin=bar_table.c.child_id ==
> Foo.id, backref='parents')
>
> On Wed, Feb 25, 2009 at 3:12 PM, Stephen Telford 
> wrote:
> > Okay, that sounds like a plan but., not to sound too much like a broken
> > record, does anyone have an -actual- example ? looking at pages with a
> lot
> > of API's is not really going to help me too much :(
> >
> > This maybe slightly off-topic and it's really NOT meant as flamebait
> but.. I
> > remember a while ago playing around with DBIx (the perl ORM) and one of
> the
> > things that -really- made it easy to get to grips with as the
> > DBIx::Cookbook. It maybe a good idea to fling something similiar into the
> > sqlalchemy documentation...
> >
> > if I had more experience I would write it but.. yes. It definitely is the
> > quickest ORM I have seen/used, but, all the speed is for naught if you
> hit
> > the 20% wall.
> >
> > Regards
> > Stef
> >
> > On Wed, Feb 25, 2009 at 4:21 PM, Michael Bayer  >
> > wrote:
> >>
> >> check out the association proxy extension if you're looking to have
> "Bar"
> >> be "hidden" as an association object.   it will ultimately use Foo/Bar
> for
> >> querying but attribute access would be proxied through the names you
> >> confgure.
> >>
> >> On Feb 25, 2009, at 4:11 PM, Stephen Telford wrote:
> >>
> >> Hello Az,
> >> Yes, Bar is the association table of Foo to Foo. In essence, this is
> a
> >> self join through a join table.. I have tried and hit my head on this
> for
> >> (quite literally) hours. In the end, and for the record, I ended up
> creating
> >> a method on the model itself such as ;
> >>
> >> def children(self):
> >> childFoo=Foo.__table__.alias()
> >> return
> >> object_session(self).query(Foo).filter(and_(childFoo.c.deleted == 0,
> >> childFoo.id <> self.id, self.id == Bar.parent_id))
> >>
> >> Not the prettiest way, nor what I would expect, but in lieu of an
> >> actual example, and to help anyone who ends up treading the same path as
> me,
> >> I hope this helps.
> >>
> >> Regards
> >> Stef
> >>
> >> On Wed, Feb 25, 2009 at 4:29 AM,  wrote:
> >>>
> >>> u mean, the Bar is an association table of Foo to Foo?
> >>> u have to use secondary_table and/or secondary_join in the relation
> >>> setup. And probably specify remote_side or it may not know which Foo
> >>> is what.
> >>>
> >>> On Wednesday 25 February 2009 03:39:20 Stef wrote:
> >>> > Hello Everyone,
> >>> >First of all, kudos on SQLAlchemy.. the speed is pretty amazing
> >>> > - I am coming from the SQLObject world and there is a definite
> >>> > difference. Excellent work. I am also getting to grips with it
> >>> > pretty quickly, using object_session and all that good stuff. This
> >>> > said, I 

[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread Bobby Impollonia

I am doing something similar. The following code works for me in SQLA .4.8
class Foo(Base):
__tablename__ = 'foo'
id = Column(Integer, primary_key=True)

bar_table = Table('bar', Base.metadata,
Column('parent_id', Integer, ForeignKey('foo.id'), nullable=False),
Column('child_id', Integer, ForeignKey('foo.id'), nullable=False))

Foo.children = relation(Foo, secondary = bar_table, primaryjoin =
bar_table.c.parent_id == Foo.id, secondaryjoin=bar_table.c.child_id ==
Foo.id, backref='parents')

On Wed, Feb 25, 2009 at 3:12 PM, Stephen Telford  wrote:
> Okay, that sounds like a plan but., not to sound too much like a broken
> record, does anyone have an -actual- example ? looking at pages with a lot
> of API's is not really going to help me too much :(
>
> This maybe slightly off-topic and it's really NOT meant as flamebait but.. I
> remember a while ago playing around with DBIx (the perl ORM) and one of the
> things that -really- made it easy to get to grips with as the
> DBIx::Cookbook. It maybe a good idea to fling something similiar into the
> sqlalchemy documentation...
>
> if I had more experience I would write it but.. yes. It definitely is the
> quickest ORM I have seen/used, but, all the speed is for naught if you hit
> the 20% wall.
>
> Regards
> Stef
>
> On Wed, Feb 25, 2009 at 4:21 PM, Michael Bayer 
> wrote:
>>
>> check out the association proxy extension if you're looking to have "Bar"
>> be "hidden" as an association object.   it will ultimately use Foo/Bar for
>> querying but attribute access would be proxied through the names you
>> confgure.
>>
>> On Feb 25, 2009, at 4:11 PM, Stephen Telford wrote:
>>
>> Hello Az,
>>     Yes, Bar is the association table of Foo to Foo. In essence, this is a
>> self join through a join table.. I have tried and hit my head on this for
>> (quite literally) hours. In the end, and for the record, I ended up creating
>> a method on the model itself such as ;
>>
>>     def children(self):
>>     childFoo=Foo.__table__.alias()
>>     return
>> object_session(self).query(Foo).filter(and_(childFoo.c.deleted == 0,
>> childFoo.id <> self.id, self.id == Bar.parent_id))
>>
>>     Not the prettiest way, nor what I would expect, but in lieu of an
>> actual example, and to help anyone who ends up treading the same path as me,
>> I hope this helps.
>>
>>     Regards
>>     Stef
>>
>> On Wed, Feb 25, 2009 at 4:29 AM,  wrote:
>>>
>>> u mean, the Bar is an association table of Foo to Foo?
>>> u have to use secondary_table and/or secondary_join in the relation
>>> setup. And probably specify remote_side or it may not know which Foo
>>> is what.
>>>
>>> On Wednesday 25 February 2009 03:39:20 Stef wrote:
>>> > Hello Everyone,
>>> >    First of all, kudos on SQLAlchemy.. the speed is pretty amazing
>>> > - I am coming from the SQLObject world and there is a definite
>>> > difference. Excellent work. I am also getting to grips with it
>>> > pretty quickly, using object_session and all that good stuff. This
>>> > said, I have hit that 20% problem, and am hoping someone can shine
>>> > a light on it.
>>> >
>>> >    I have a table, lets call it Foo and another table Bar. Foo
>>> > should be able to get a list of it's parents via Bar or it's
>>> > children via Bar. I am also using the declarative_base system
>>> > rather than table/ mapper defined seperately.
>>> >
>>> >    class Foo(Base):
>>> >         id = Column(Integer, primary_key=True)
>>> >
>>> >    class Bar(Base):
>>> >         parent_id = Column(Integer, default=0)
>>> >         child_id = Column(Integer, default=0)
>>> >
>>> >    So, I thought something like ; children = relation(Foo,
>>> > backref=backref('parents'), primaryjoin=and_(Foo.id==Bar.parent_id)
>>> >
>>> >    But that's where I hit the 'wall' as it were, is there a way to
>>> > setup a synonym for Foo in the primaryjoin clause ? Am I missing
>>> > something stupid ? (I am okay with that ;)
>>> >
>>> >    Regards
>>> >    Stef
>>> >
>>>
>>>
>>
>>
>>
>>
>>
>>
>>
>
>
> >
>

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



[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread Stephen Telford
Okay, that sounds like a plan but., not to sound too much like a broken
record, does anyone have an -actual- example ? looking at pages with a lot
of API's is not really going to help me too much :(

This maybe slightly off-topic and it's really NOT meant as flamebait but.. I
remember a while ago playing around with DBIx (the perl ORM) and one of the
things that -really- made it easy to get to grips with as the
DBIx::Cookbook. It maybe a good idea to fling something similiar into the
sqlalchemy documentation...

if I had more experience I would write it but.. yes. It definitely is the
quickest ORM I have seen/used, but, all the speed is for naught if you hit
the 20% wall.

Regards
Stef

On Wed, Feb 25, 2009 at 4:21 PM, Michael Bayer wrote:

> check out the association proxy extension if you're looking to have "Bar"
> be "hidden" as an association object.   it will ultimately use Foo/Bar for
> querying but attribute access would be proxied through the names you
> confgure.
>
>
> On Feb 25, 2009, at 4:11 PM, Stephen Telford wrote:
>
> Hello Az,
> Yes, Bar is the association table of Foo to Foo. In essence, this is a
> self join through a join table.. I have tried and hit my head on this for
> (quite literally) hours. In the end, and for the record, I ended up creating
> a method on the model itself such as ;
>
> def children(self):
> childFoo=Foo.__table__.alias()
> return
> object_session(self).query(Foo).filter(and_(childFoo.c.deleted == 0,
> childFoo.id <> self.id, self.id == Bar.parent_id))
>
> Not the prettiest way, nor what I would expect, but in lieu of an
> actual example, and to help anyone who ends up treading the same path as me,
> I hope this helps.
>
> Regards
> Stef
>
> On Wed, Feb 25, 2009 at 4:29 AM,  wrote:
>
>>
>> u mean, the Bar is an association table of Foo to Foo?
>> u have to use secondary_table and/or secondary_join in the relation
>> setup. And probably specify remote_side or it may not know which Foo
>> is what.
>>
>> On Wednesday 25 February 2009 03:39:20 Stef wrote:
>> > Hello Everyone,
>> >First of all, kudos on SQLAlchemy.. the speed is pretty amazing
>> > - I am coming from the SQLObject world and there is a definite
>> > difference. Excellent work. I am also getting to grips with it
>> > pretty quickly, using object_session and all that good stuff. This
>> > said, I have hit that 20% problem, and am hoping someone can shine
>> > a light on it.
>> >
>> >I have a table, lets call it Foo and another table Bar. Foo
>> > should be able to get a list of it's parents via Bar or it's
>> > children via Bar. I am also using the declarative_base system
>> > rather than table/ mapper defined seperately.
>> >
>> >class Foo(Base):
>> > id = Column(Integer, primary_key=True)
>> >
>> >class Bar(Base):
>> > parent_id = Column(Integer, default=0)
>> > child_id = Column(Integer, default=0)
>> >
>> >So, I thought something like ; children = relation(Foo,
>> > backref=backref('parents'), primaryjoin=and_(Foo.id==Bar.parent_id)
>> >
>> >But that's where I hit the 'wall' as it were, is there a way to
>> > setup a synonym for Foo in the primaryjoin clause ? Am I missing
>> > something stupid ? (I am okay with that ;)
>> >
>> >Regards
>> >Stef
>> >
>>
>>
>>
>
>
>
>
>
> >
>

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



[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread Michael Bayer
check out the association proxy extension if you're looking to have  
"Bar" be "hidden" as an association object.   it will ultimately use  
Foo/Bar for querying but attribute access would be proxied through the  
names you confgure.


On Feb 25, 2009, at 4:11 PM, Stephen Telford wrote:

> Hello Az,
> Yes, Bar is the association table of Foo to Foo. In essence,  
> this is a self join through a join table.. I have tried and hit my  
> head on this for (quite literally) hours. In the end, and for the  
> record, I ended up creating a method on the model itself such as ;
>
> def children(self):
> childFoo=Foo.__table__.alias()
> return  
> object_session(self).query(Foo).filter(and_(childFoo.c.deleted == 0,  
> childFoo.id <> self.id, self.id == Bar.parent_id))
>
> Not the prettiest way, nor what I would expect, but in lieu of  
> an actual example, and to help anyone who ends up treading the same  
> path as me, I hope this helps.
>
> Regards
> Stef
>
> On Wed, Feb 25, 2009 at 4:29 AM,  wrote:
>
> u mean, the Bar is an association table of Foo to Foo?
> u have to use secondary_table and/or secondary_join in the relation
> setup. And probably specify remote_side or it may not know which Foo
> is what.
>
> On Wednesday 25 February 2009 03:39:20 Stef wrote:
> > Hello Everyone,
> >First of all, kudos on SQLAlchemy.. the speed is pretty amazing
> > - I am coming from the SQLObject world and there is a definite
> > difference. Excellent work. I am also getting to grips with it
> > pretty quickly, using object_session and all that good stuff. This
> > said, I have hit that 20% problem, and am hoping someone can shine
> > a light on it.
> >
> >I have a table, lets call it Foo and another table Bar. Foo
> > should be able to get a list of it's parents via Bar or it's
> > children via Bar. I am also using the declarative_base system
> > rather than table/ mapper defined seperately.
> >
> >class Foo(Base):
> > id = Column(Integer, primary_key=True)
> >
> >class Bar(Base):
> > parent_id = Column(Integer, default=0)
> > child_id = Column(Integer, default=0)
> >
> >So, I thought something like ; children = relation(Foo,
> > backref=backref('parents'), primaryjoin=and_(Foo.id==Bar.parent_id)
> >
> >But that's where I hit the 'wall' as it were, is there a way to
> > setup a synonym for Foo in the primaryjoin clause ? Am I missing
> > something stupid ? (I am okay with that ;)
> >
> >Regards
> >Stef
> >
>
>
>
>
> >


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



[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread Stephen Telford
Hello Az,
Yes, Bar is the association table of Foo to Foo. In essence, this is a
self join through a join table.. I have tried and hit my head on this for
(quite literally) hours. In the end, and for the record, I ended up creating
a method on the model itself such as ;

def children(self):
childFoo=Foo.__table__.alias()
return
object_session(self).query(Foo).filter(and_(childFoo.c.deleted == 0,
childFoo.id <> self.id, self.id == Bar.parent_id))

Not the prettiest way, nor what I would expect, but in lieu of an actual
example, and to help anyone who ends up treading the same path as me, I hope
this helps.

Regards
Stef

On Wed, Feb 25, 2009 at 4:29 AM,  wrote:

>
> u mean, the Bar is an association table of Foo to Foo?
> u have to use secondary_table and/or secondary_join in the relation
> setup. And probably specify remote_side or it may not know which Foo
> is what.
>
> On Wednesday 25 February 2009 03:39:20 Stef wrote:
> > Hello Everyone,
> >First of all, kudos on SQLAlchemy.. the speed is pretty amazing
> > - I am coming from the SQLObject world and there is a definite
> > difference. Excellent work. I am also getting to grips with it
> > pretty quickly, using object_session and all that good stuff. This
> > said, I have hit that 20% problem, and am hoping someone can shine
> > a light on it.
> >
> >I have a table, lets call it Foo and another table Bar. Foo
> > should be able to get a list of it's parents via Bar or it's
> > children via Bar. I am also using the declarative_base system
> > rather than table/ mapper defined seperately.
> >
> >class Foo(Base):
> > id = Column(Integer, primary_key=True)
> >
> >class Bar(Base):
> > parent_id = Column(Integer, default=0)
> > child_id = Column(Integer, default=0)
> >
> >So, I thought something like ; children = relation(Foo,
> > backref=backref('parents'), primaryjoin=and_(Foo.id==Bar.parent_id)
> >
> >But that's where I hit the 'wall' as it were, is there a way to
> > setup a synonym for Foo in the primaryjoin clause ? Am I missing
> > something stupid ? (I am okay with that ;)
> >
> >Regards
> >Stef
> >
>
> >
>

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



[sqlalchemy] Re: Self Join via Join Table ?

2009-02-25 Thread az

u mean, the Bar is an association table of Foo to Foo?
u have to use secondary_table and/or secondary_join in the relation 
setup. And probably specify remote_side or it may not know which Foo 
is what.

On Wednesday 25 February 2009 03:39:20 Stef wrote:
> Hello Everyone,
>First of all, kudos on SQLAlchemy.. the speed is pretty amazing
> - I am coming from the SQLObject world and there is a definite
> difference. Excellent work. I am also getting to grips with it
> pretty quickly, using object_session and all that good stuff. This
> said, I have hit that 20% problem, and am hoping someone can shine
> a light on it.
>
>I have a table, lets call it Foo and another table Bar. Foo
> should be able to get a list of it's parents via Bar or it's
> children via Bar. I am also using the declarative_base system
> rather than table/ mapper defined seperately.
>
>class Foo(Base):
> id = Column(Integer, primary_key=True)
>
>class Bar(Base):
> parent_id = Column(Integer, default=0)
> child_id = Column(Integer, default=0)
>
>So, I thought something like ; children = relation(Foo,
> backref=backref('parents'), primaryjoin=and_(Foo.id==Bar.parent_id)
>
>But that's where I hit the 'wall' as it were, is there a way to
> setup a synonym for Foo in the primaryjoin clause ? Am I missing
> something stupid ? (I am okay with that ;)
>
>Regards
>Stef
>

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