Jonathan Vanasco <jonat...@findmeon.com> writes:

> in postgresql i have a boolean field that allows Null values.
>
> i'd like to query for the items that are not 'true'
>
> filter( tablename.is_deleted != True )
>
> creates this sql:
>     is_deleted != True
>
> however this is incorrect and doesn't match the resultset i want.  it

To be fair, it is correct in terms of doing what you asked, though if
you want it to include NULLs I agree it doesn't do what you want...

> needs to read :
>     is_deleted IS NOT True

There are "is" and "isnot" operators in sqlalchemy.sql.operators, but I'm
not entirely sure how to trigger from within an expression (and they don't
seem to be column operators, but I'm probably missing something simple).

However, you should be able to use the generic "op" method, as in:

    filter(tablename.is_deleted.op("IS NOT")(True))

Alternatively, you could explicitly manage the handling of NULL
entries:

    from sqlalchemy.sql.functions import coalesce

    filter(coalesce(tablename.is_deleted, False) != True)

This way you avoid the treatment of NULLs in the comparison entirely.  This
method also extrapolates to other cases more readily since it works with
non-boolean fields as well.

-- David

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