Let me check my understanding of what you're suggesting. The result would look something like:
crates2apples = select([ crate_table.c.id, apple_table.c.id, apple_table.c.description, apple_table.c.stem_length ], from_obj = <join here>) crates2apples_mapper = mapper(Apples, crates2apples, non_primary=True) mapper(Crates, crate_table, properties={ 'apples': relation(Apples, <actually, I have no clue what would go here>), }) And, just to be clear, I could eagerload the Crates.apples relation under this configuration? Thanks, Alan On Sat, Dec 27, 2008 at 4:01 PM, Michael Bayer <mike...@zzzcomputing.com> wrote: > > you probably dont want to bother with "secondary" since it doesnt get > you anything here and you should likely pare down the size of your > join condition to something more minimal. you might want to also > make life easier and make the relation to a non_primary mapper for > Apples which maps to a simple select() statement, instead of shoving > everything into a huge relation(). You don't need to establish > use_labels as that only has to do with multiple tables in a single > select() not conflicting on the column namespace. You also should be > using 0.5 not only because it handles things like this better but also > any bugs we fix are likely to be in that series. > > > On Dec 27, 2008, at 5:24 PM, Alan Shields wrote: > >> >> (wow, way to go tab key! Sorry, folks) >> >> I'm having a bit of trouble and I think it may be a deficiency in my >> understanding of SqlAlchemy. >> >> Let's say I have: >> >> Table(Apples) >> Table(Crates) >> >> apples_by_crate = \ >> select([ crate_table.c.id.label("crate_id"), >> apple_table.c.id.label("apple_id"), >> ], >> from_obj = <long list of tables and conditions here>) >> apples_by_crate_a = >> apples_by_crate.correlate(None).alias('_apples_by_crate') >> >> >> mapper(Crates, >> 'apples':relation(Apples, viewonly=True, >> secondary=apples_by_crate, >> primaryjoin= apple_table.c.id >> == apples_by_crate_a.c.apple_id, >> secondaryjoin= >> apples_by_crate_a.c.crate_id == crate_table.c.id, >> foreignkeys= [ >> apples_by_crate_a.c.apple_id, crate_table.c.id ])) >> >> This works fine...until I try to eagerload apples. Bad Things Happen. >> If it's a confounding factor, know that >> apples_by_crate contains another subquery that also has a column >> "crate_id". >> >> My impression right now is that I need to .use_labels for my >> subqueries so I don't have conflicting names, but I'm starting to >> wonder if I'm just doing it wrong. >> >> Any advice? >> >> Alan >> >> > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---