On Aug 21, 2012, at 4:34 PM, adolfo wrote:

> Hi Michael and all....
> 
> I successfully built a "all nodes" relationship following your guidelines.
> 
> As:
> 
> subq1=select([caso_vinculo.c.caso_1_id.label('id1'),caso_vinculo.c.caso_2_id.label('id2')]).union(select([caso_vinculo.c.caso_2_id,
>  caso_vinculo.c.caso_1_id]))
> subq2=aliased(subq1)
> 
> CasoMapper = mapper(Caso, caso, properties=
>                     {
>                       'LinkedNodes':relation(Caso, secondary=subq2,
>                                           primaryjoin=caso.c.id == 
> subq2.c.id1,
>                                           
> secondaryjoin=subq2.c.id2==caso.c.id),
> So with this property I can get both left and right linked nodes.
> 
> 
> with:
> CasoAlias=aliased(Caso)
> q1=session.query(Caso.id).outerjoin(CasoAlias.LinkedNodes)
> q1.all()     
> works fine
> and once I add a new column from the aliased entity (CasoAlias)
> q2=q1.add_column(CasoAlias.id)
> it compiles fine
> 
> SELECT caso.id AS caso_id, caso_1.id AS caso_1_id 
> FROM caso AS caso_1 LEFT OUTER JOIN (SELECT caso_vinculo.caso_1_id AS id1, 
> caso_vinculo.caso_2_id AS id2 
> FROM caso_vinculo UNION SELECT caso_vinculo.caso_2_id AS caso_2_id, 
> caso_vinculo.caso_1_id AS caso_1_id 
> FROM caso_vinculo) AS anon_1 ON caso_1.id = anon_1.id1 LEFT OUTER JOIN caso 
> ON anon_1.id2 = caso.id

there's a bug in SQLAlchemy here which I'll have fixed soon, it is somewhat 
hilarious though, the unusual naming scheme you're using for caso_vinculo's 
columns is conflicting with the labels SQLAlchemy is assigning.  Note in the 
query, "caso_1.id AS caso_1_id" at the top.   Later on, when it renders 
"caso_vinculo.caso_1_id" in the subquery, it's erroneously stepping on the 
internal column record for the "caso_1_id" symbol and breaking things.

If you use different names on the caso_vinculo table for now it should be fine.

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