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