So FWIW, for now, I cast all three columns into strings and concatenated 
them using the column_property() expression in the mapper, and then did the 
comparison on that.  It worked ok to create the join condition I needed. 
 It wasn't a pretty as a tuple comparison but it got the job done and I can 
hit my deadline for tomorrow morning.


On Sunday, April 20, 2014 2:38:21 PM UTC-4, Rick Otten wrote:
>
> I would like to apply a condition in an outer join that matches a 
> multi-item list rather than a single value.
>
> In other words, I'm trying to get SQLAlchemy 0.8.6 connecting to 
> PostgreSQL 9.3.4 to generate SQL like this:
>
>
>
> select
>>     *
>> from
>>     mytable mt
>>     left outer join myothertable mo on
>>            (m0.col1, m0.col2, mo.col3) = (select m2.col1, m2.col2, m2.col3
>>                                                          from 
>> myothertable m2
>>                                                          where mt.col1 = 
>> m2.wilson_id
>>                                                          order by m2.col3 
>> desc
>>                                                          limit 1)
>
>
>
> When I construct my query object back in Python 2.7:
> mo = aliased(myothertable)
> m2 = aliased(myothertable)
> mySession.query(mytable, myothertable)\
>                 .select_from(mytable)\
>                 .outerjoin(mo,
>                                [mo.col1, mo.col2, mo.col3] == select(\
>                                [m2.col1, m2.col2, m2.col3])\
>                                    .where(m2.col1 == mytable.col1)\
>                                    .order_by(m2.col3.desc())\
>                                    .limit(1))
>
>
> I get:
>
>   File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 1699, 
> in outerjoin
>   File "<string>", line 1, in <lambda>
>   File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 51, in 
> generate
>   File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 1816, 
> in _join
>   File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 1846, 
> in _join_left_to_right
>   File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py", line 1861, 
> in _prepare_right_side
>   File "build/bdist.linux-x86_64/egg/sqlalchemy/inspection.py", line 74, 
> in inspect
> *sqlalchemy.exc.NoInspectionAvailable: No inspection system is available 
> for object of type <type 'bool'>*
>
>
> I tried both List type and Tuple type in my comparison from the inner 
> select statement.
> When I look at the code where this exception is thrown, it suggests that 
> something is wrong with my mapping.
>
> I've done this join by comparing a single column with these two tables, 
> and I've done similar things with other single column comparisons.  I'm not 
> sure why I'm unable to compare a set of columns instead.
>
> I've been pondering casting all three columns to string and then 
> concatenating them (either in the table mapping, or in the query) to see if 
> I can get back to a single value comparision which I expect to work.  I'd 
> rather just compare the tuple/lists though.
>
> I could use some hints.  If you guys have some.   Thanks!
>
>
>
>  
>

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to