Given the following statement:

p = db.query(Profile).options(joinedload('*')).filter_by(id=p.id).limit(1).one()

I will get a subquery + a join, instead of a "pure" join:

SELECT [...] FROM (SELECT profile.id AS profile_id, ...FROM profile WHERE 
profile.id = %(id_1)s 
LIMIT %(param_1)s) AS anon_1 LEFT OUTER JOIN city AS city_1 ON city_1.id = 
anon_1.profile_city LEFT OUTER JOIN country AS country_1 ON country_1.id = 
city_1.country LEFT OUTER JOIN state AS state_1 ON country_1.id = 
state_1.country LEFT OUTER JOIN state AS state_2 ON state_2.id = city_1.state 
LEFT OUTER JOIN country AS country_2 ON country_2.id = state_2.country LEFT 
OUTER JOIN state AS state_3 ON state_3.id = city_1.state LEFT OUTER JOIN 
country AS country_3 ON country_3.id = state_3.country LEFT OUTER JOIN starred 
AS starred_1 ON anon_1.profile_id = starred_1.star LEFT OUTER JOIN profiletext 
AS profiletext_1 ON anon_1.profile_id = profiletext_1.profile LEFT OUTER JOIN 
starred AS starred_2 ON anon_1.profile_id = starred_2.idprofile LEFT OUTER JOIN 
photo AS photo_1 ON anon_1.profile_id = photo_1.profile LEFT OUTER JOIN gps AS 
gps_1 ON anon_1.profile_id = gps_1.idprofile

but what I really need is:

SELECT ...FROM profile LEFT OUTER JOIN city AS city_1 ON city_1.id = 
profile.city LEFT OUTER JOIN country AS country_1 ON country_1.id = 
city_1.country LEFT OUTER JOIN state AS state_1 ON country_1.id = 
state_1.country LEFT OUTER JOIN state AS state_2 ON state_2.id = city_1.state   
  LEFT OUTER JOIN country AS country_2 ON country_2.id = state_2.country LEFT 
OUTER JOIN state AS state_3 ON state_3.id = city_1.state LEFT OUTER JOIN 
country AS country_3 ON country_3.id = state_3.country LEFT OUTER JOIN starred 
AS starred_1 ON profile.id = starred_1.star LEFT OUTER JOIN profiletext AS 
profiletext_1 ON profile.id = profiletext_1.profile LEFT OUTER JOIN starred AS 
starred_2 ON profile.id = starred_2.idprofile LEFT OUTER JOIN photo AS photo_1 
ON profile.id = photo_1.profile LEFT OUTER JOIN gps AS gps_1 ON profile.id = 
gps_1.idprofile                                                                 
                                                                                
                                                   WHERE profile.id = 4 
limit 1;

i.e. no subquery.

SQLAlchemy==0.8.0   postgresql 9.2, 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to