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

Reply via email to