the join() function, given two tables, will make a foreign key join  
condition by default if you dont specify the "onclause".  but if you  
arent using a "join" function somewhere, then nothing else is going  
to generate any clauses for you.

On Feb 27, 2007, at 10:50 AM, Rick Morrison wrote:

> Shouldn't SA be able to figure out the following joins without  
> needing the explicit join params?
>
> I've got to be missing something dumb.
>
> from sqlalchemy import *
>
> metadata = BoundMetaData('sqlite:///:memory:')
>
> ent = Table('entity', metadata,
>     Column('id',              INT,  Sequence('entity_id'),  
> primary_key=True, nullable=False),
>     Column('nm',              VARCHAR(12), nullable=False)
>     )
>
> loc = Table('location', metadata,
>       Column('id',              INT, Sequence('location_id'),  
> primary_key=True, nullable=False),
>       Column('nm',              VARCHAR(50))
>       )
>
> el = Table('el_rel', metadata,
>       Column('typ',             VARCHAR(12), nullable=False),
>       Column('ident',           INT, ForeignKey(' entity.id'),   
> nullable=False),
>       Column('idloc',           INT, ForeignKey('location.id'),  
> nullable=False)
>       )
>
> metadata.create_all()
>
> ent.insert ().execute({'id':1, 'nm':'Eone'},  {'id':2,  
> 'nm':'Etwo'},  {'id':3, 'nm':'Ethree'})
> loc.insert().execute({'id':1, 'nm':'Lone'}, {'id':2, 'nm':'Ltwo'},  
> {'id':3, 'nm':'Lthree'})
> el.insert().execute({'typ':'TEST1', 'ident':1, 'idloc':1},  
> {'typ':'TEST2', 'ident':2, 'idloc':2})
>
> testcases = [('2-way ->ent', [ent.c.nm ], None),
>              ('2-way ->loc', [loc.c.nm], None),
>              ('3-way ->ent+loc', [ent.c.nm, loc.c.nm], None),
>              ('3-way, explicit join', [ent.c.nm, loc.c.nm],
>               el.join(ent, ent.c.id==el.c.ident).join(loc,  
> loc.c.id==el.c.idloc))
>              ]
>
> for test_name, test_cols, test_from in testcases:
>     print
>     print test_name
>     q = select(test_cols, el.c.typ == 'TEST1')
>     if test_from:
>         q.append_from(test_from)
>     print str(q)
>     print q.execute().fetchall()
>
>
>
> Thx,
> Rick
>
> >


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to