On Sep 28, 2008, at 6:38 PM, Ksenia wrote:

>
> Hi list,
>
> I can't figure out a very simple thing. All I want is to do this
> query:
>
>
> select table1.A, table2.B, table3.C from table1, table2, table3 where
> table1.foreignkey2 = table2.primarykey and table1.foreignkey3 =
> table3.primarykey;
>
> When rendering results, I want to be able to refer to the properties
> of the joined tables:
>
>
> <td>${row.A}</td>
> <td>${row.table2.B}</td>
> <td>${row.table3.C}</td>
>
> My mapper looks like:
>
> mapper(Table1, table1,
>                properties={
>                    'table2':relation(Table2, lazy=False,
> uselist=False),
>                    'table3':relation(Table3, lazy=False,
> uselist=False)
>                }
>            )
>
>
> When I run it it creates a query with tables joined via LEFT OUER
> JOIN.
>
> How can I non-lazy (with minimal number of queries) join tables,
> without LEFT OUTER JOIN? But still be able to refer to the properties
> of joined tables?


remove the lazy=False from each relation(); leave eager loading as an  
option which you'd enable for an individual Query if desired.

For your SQL to be generated, say:

session.query(Table1.A, Table2.B,  
Table3 
.C 
).filter 
(Table1 
.foreignkey2 
==Table2.primarykey).filter(Table1.foreignkey3==Table3.primarykey)

To create the equivalent using JOIN while taking advantage of the  
relations:

session.query(Table1.A, Table2.B,  
Table3.C).join(Table1.table2).join(Table1.table3)



--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to