I do have correct results, but this is very slow.
I assume that I have to query(Model) whitout any relations
and then eagerload or join or whatever that will make this work for
me.

Am i right that mapper's lazy=False is not good for this situation ?

On 16 Paź, 19:07, Michael Bayer <[EMAIL PROTECTED]> wrote:
> first get your query to work properly without any eager loading,  
> meaning, you get the correct results.  then, if your query happens to  
> JOIN to the table such that the returned rows can be used to populate  
> the collection or many-to-one reference, use the contains_eager()  
> option as described in the doc.   This option allows you to hand  
> construct exactly the query you want without SQLA adding anything to  
> it, but you can still take advantage of eager loading.
>
> If the JOIN doesnt really represent the correct reference in all  
> cases, then you'd use automatic eager loading, which will make its own  
> OUTER JOIN that retrieves the correct data (thats what the anon_1  
> thing is).    I would advise only enabling this on a per-query basis,  
> using query.options(eagerload(MyClass.someproperty)).   If you dont  
> want any joins at all, then the collections/references load themselves  
> through lazy loading.
>
> The subtlety here is that filtering results on multiple tables does  
> not necessarily represent the same kind of join that would properly  
> populate object references, which is why SQLA keeps these separate in  
> the default case.  The query you're doing below is using an EXISTS on  
> a subquery so I dont see any opportunities for using contains_eager()  
> as it is.
>
> On Oct 16, 2008, at 12:45 PM, g00fy wrote:
>
>
>
> > So in simple words, how do I speed this up?
>
> > On 16 Paź, 18:42, Michael Bayer <[EMAIL PROTECTED]> wrote:
> >> On Oct 16, 2008, at 12:31 PM, g00fy wrote:
>
> >>> I have loads of related fields in my model.
> >>> I set up lazy = False where i had to and i don't know why SA keeps
> >>> "duplicating" (aliasing) my tables, so i fetch my data twice (2  
> >>> times
> >>> more column that i realy need)
>
> >>> i send my model and mappings and the sql code SA is querying.
>
> >>> models:
> >>>http://dpaste.com/84873/
> >>> tables:
> >>>http://dpaste.com/84874/
> >>> mappings:
> >>>http://dpaste.com/84875/
> >>> sql:
> >>>http://dpaste.com/84876/
>
> >>> notice in sql that  anon_1 is realy the same as w_warehouse.
> >>> this way i am stuck with 1000 objects having 2 languages and 2
> >>> currencies.
>
> >>> the code I do is :
> >>> meta
> >>> .Session
> >>> .query(model.Warehouse).order_by(model.Warehouse.area_total.asc())
> >>> [0:10]
> >>> .filter(
> >>>                    model.Warehouse.price.has(
> >>>                        model.Price.total<=price_total_max
> >>>                    )
> >>>                )
>
> >>> how can I get rid of that nasty anon_1, and speed up this thing?
>
> >> look 
> >> intohttp://www.sqlalchemy.org/trac/wiki/FAQ#ImusinglazyFalsetocreateaJOIN
> >> ...
> >>    .   an eager load of "Price" is not related to the filter  
> >> criterion
> >> using "Price" - you need to join explicitly.
>
> >> To "dual purpose" your explicit join as an eager load as well, look
> >> into :  
> >> http://www.sqlalchemy.org/docs/05/mappers.html#advdatamapping_relatio
> >> ...
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
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