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?

sorry, this is a actually an eagerloading bug, which has probably come up 
before, but is now posted as http://www.sqlalchemy.org/trac/ticket/2614.   
eager loading in conjunction with with_polymorphic has always been a bleeding 
edge feature and in this case the internal attribute targeting used by the ORM 
is seeing a conflict between ASubclassA.attr and ASubclassB.attr.  It will 
require a major rethink of some aspects of this internal naming in order for 
this issue to be resolved.    0.8 has already had many weeks of effort put into 
improving the with_polymorphic system, so we are in better shape to attack such 
issues.

you will get the correct results if you don't try to subqueryload both 
same-named attributes at the same time.  A workaround for now would be to name 
the two relationships differently, the use a @property to proxy them both:

class A(..):
    myChildrenA = relationship(...)

   @property
   def myChildren(self):
        return myChildrenA

class B(..):
    myChildrenB = relationship(...)

   @property
   def myChildren(self):
        return myChildrenB

or alternatively, another suggestion is to use a database schema that does not 
rely so heavily on long chains of joins in order to produce basic results.   

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