Since I am new to SA just want if that means that even if we have an eager load on a 1:N relationships we should still do an explicit JOIN if the query involves columns from both side of relations?
On 4/9/07, Michael Bayer <[EMAIL PROTECTED]> wrote: > > > eagerly loaded relationships are not part of the main Query criterion/ > select. the eager loads are always tacked on secondary to the inner > query. the main goal being that if you had lazy or eagerly loaded > relationships, in both cases youd get the identical result. so any > tables that you add to the Query criterion are completely distinct > from their possible appearance in an eager loaded relationship (it > has to be this way, otherwise eager loads would change the result of > the query..eager loads are meant to be an optimization only). thats > why the StoryStats' table is getting added in to the inner query. > > so the approaches to take are: > > 1. explicitly join against StoryStats: > > session.query(Story).join('storystatrelation').order_by > (StoryStats.c.rating) > > 2. create whatever query you want and load its instances via instances > (): > > s = story_table.outerjoin(story_stats_table).select > (order_by=story_stats_table.c.rating) > session.query(Story).options(contains_eager > ('storystatrelation')).instances(s.execute()) > > 3. a little less dynamic, specify order_by in the eagerly loaded > relation() in the mapper setup, and specify None for the query > ordering (this is more of a trick). > > mapper(Story, story_table, properties={ > 'storystatrelation':relation(StoryStats, > story_stats_table, > lazy=False, order_by=[story_stats_table.c.rating]) > }) > > session.query(Story).order_by(None) > > > On Apr 8, 2007, at 5:39 PM, Norjee wrote: > > > > > It seems I don't understand how i can order the results of a query. > > Assume that i have two object Story and StoryStats. Each Story has > > one > > StoryStats, mapped by ForeignKey. The relation is eagerloaded > > (lazy=False) > > (The actual model is a tad more complicated, but the idea is the > > same) > > > > When i now try to select Stories, ordering by create_date goes fine, > > e.g. > > session.query(Story).order_by(Story.c.create_date) > > > > > > But ordering by the realated StoryStats goes awry :/ > > session.query(Story).order_by(StoryStats.c.rating), only a singe > > Story > > is returned > > Now errors are thrown however. > > > > > > Is there something I'm missing here? (I know I probably could do > > session.query(StoryStats).order_by(StoryStats.c.rating), but that > > kind > > of defeats the purpose as the ordering is dynamic) > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---