On Jan 21, 2009, at 7:46 PM, Jack Stahl wrote:

> Hello,
>
> I've got a few SQL interfaces where I'd like to change my query  
> based on the columns required by the client.  For example, in one  
> situation, I only join against my User table if my client requires a  
> photo id:
>
> # cols is the list of columns the client would like selected
> if User.c.photo_id in cols:
>     table = table.join(User.table)
>
> In another situation, I'd like to include the flags column in the  
> query even if the client ask for it
>
> if not cols:
>     cols = [cls]
> elif not (cls.c.flags in cols):
>     # ensure flags are there so we can add "is_active"
>     cols.append(cls.c.flags)
>
> However, my tests for membership pass regardless of whether column  
> is actually in the list cols.  That is,
>
> Column('flags', BitField(), table=<foo_table>) in [Column('foo',  
> String(length=84, convert_unicode=False, assert_unicode=None),  
> table=<foo_table>), Column('bar', Text(length=None,  
> convert_unicode=False, table=<foo_table>)]
>
> evaluates to True
>
> Is the == operator not properly implemented for SQLAlchemy Columns?   
> (I'm using version 0.42)

it is not "properly" implemented in the sense that it does not return  
True or False, but if you''ve used SQLalchemy, you'd know that we  
redefine the "==" operator to return ClauseElement objects.   That's  
why you can say somecolumn==5 and get an expression from it.

So you cannot use the "in" operator to search for a Column object in a  
list.  The solution however is simple.  Use a set() instead, where the  
objects will be compared based on the return value of __hash__() which  
results in an object identity comparison.

        if User.c.photo_id in set(cols):


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