On Apr 9, 2013, at 11:21 AM, Etienne Rouxel <[email protected]> wrote:

> Hello Michael, thank you for your answer.
> 
> It is written in the documentation 
> (http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#sqlalchemy.orm.relationship)
>  :
> innerjoin=False –
> when True, joined eager loads will use an inner join to join against related 
> tables instead of an outer join. The purpose of this option is generally one 
> of performance, as inner joins generally perform better than outer joins. 
> Another reason can be the use of with_lockmode, which does not support outer 
> joins.
> 
> This flag can be set to True when the relationship references an object via 
> many-to-one using local foreign keys that are not nullable, or when the 
> reference is one-to-one or a collection that is guaranteed to have one or at 
> least one entry.
> 
> So here I am not trying to confuse the query, it is just that there is at 
> least one entry for RelationB.relation_c. So I thought that SQLAlchemy would 
> have inferred that the only solution here was to use a LEFT OUTER JOIN.

it only infers that when it follows along a chain of generations from 
joinedload().   An outerjoin() applied to the enclosing query is not detected.


> 
> I have the same result if I remove the lazy="joined" and if I use the query :
> 
> q3 = session.query(RelationA).\ 
>     outerjoin(RelationA.relation_b).\
>     options(contains_eager(RelationA.relation_b)).\
>     options(joinedload(RelationA.relation_b, RelationB.relation_c))
> 
> So, if I understand well, there is nothing wrong with my mapping, right? The 
> wrong part is just the query and I should fix it as you previously mentioned, 
> right?

yeah, just send along more options that correct its behavior in this case.



-- 
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 [email protected].
To post to this group, send email to [email protected].
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