On Nov 23, 2012, at 3:38 AM, Martin84 wrote:

> Hi Diana & Michael Bayer,
> 
> thanks for your help!
> So, you both use sqlalchemy 0.8 and I use 0.7.9 and that explains our 
> different SQL queries. 
> Now, with the join_depth=1 parameter the unexplainable SQL queries disappear 
> and there is no more difference between lazy='subquery' and subqueryload(). 
> But unfortunately now there is an other and far more problematic issue, the 
> output of showDatabase is incorrect.
> 
> I modify my showDatabase() function like this:
> 
> def showDatabase(session):
>     house = session.query(House).one()
>     for resident in house.residents:
>         print resident.myChildren
> 
> and now only one resident have a children (the men), and the one from the 
> woman disappear!
> How is this possible?
> 
> Here is my complete script with output: http://pastebin.com/HRqSWxQ0


Child refers to its parent via id_human, is a many-to-one - a Child can only 
have *one* human.  your script assigns newChild twice, once to newMen, once to 
newWoman.   assigning it to newWoman essentially removes it from newMen.



> 
> Am Freitag, 23. November 2012 06:43:33 UTC+1 schrieb Michael Bayer:
> 
> On Nov 22, 2012, at 11:16 AM, Martin84 wrote:
> 
>> Hi Diana & Michael Bayer,
>> 
>> you both have exactly the same results/sql queries, but unfortunately my 
>> results are different. This is really strange,
>> here is my complete python script with my output: 
>> http://pastebin.com/CyCs90cW
> 
> As a side note, that script is slightly different.  A "lazy='joined'" is 
> added to Human.houses.  So after your session.close(), then your 
> query(Woman), you get "human JOIN woman" which is the query(Woman), then it 
> also has "LEFT OUTER JOIN human_house_table LEFT OUTER JOIN house", which is 
> your Human.houses lazy="joined".  I'd usually not use "lazy" at all in a 
> joined inheritance mapping, as there are already too many JOINs happening 
> implicitly for there to be extra joins like this coming in. 
> 
> So then, why you don't see the "subquery".   In 0.7, you need join_depth=1 
> here, because otherwise, the ORM sees Woman->Child as Human->Human, which is 
> a cycle.  join_depth=1 means, "it's OK to join one time in this cycle".
> 
> In 0.8 this was improved so that Woman->Child isn't seen as a cycle, the 
> subclass identity is taken into account - so join_depth can be removed.  See 
> http://www.sqlalchemy.org/trac/ticket/2481 for a description of this issue.
> 
> Overall, 0.8 has a lot of improvements to joined inheritance in conjunction 
> with eagerloading and with_polymorphic.  
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/sqlalchemy/-/OUUgp8S57XAJ.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.

-- 
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 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to