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