Re: Query with boolean parameter - Mailing list psycopg

From Adrian Klaver
Subject Re: Query with boolean parameter
Date
Msg-id 321f190b-d65d-d2f7-d5bb-2ce72aa0b70d@aklaver.com
Whole thread Raw
In response to Re: Query with boolean parameter  (Paolo De Stefani <paolo@paolodestefani.it>)
List psycopg
On 3/19/22 05:10, Paolo De Stefani wrote:
> Il 19/03/2022 01:00 Christophe Pettus ha scritto:
>>> On Mar 18, 2022, at 16:56, Paolo De Stefani <paolo@paolodestefani.it> 
>>> wrote:
>>> Is there any reason why the second query results in a syntax error?
>>
>> There's not IS operator in PostgreSQL (or in SQL).  IS NULL, IS NOT
>> NULL, IS TRUE, and IS FALSE are in effect unary postfix operators, so
>> you can't construct them that way via parameter substitution.
> 
> Thanks, i see
> 
> The problem is (for me) that with psycopg2 this works:
> cur.execute('SELECT * FROM system.app_user WHERE can_edit_views IS TRUE')
> cur.execute('SELECT * FROM system.app_user WHERE can_edit_views IS %s', 
> (True,))
> cur.execute('SELECT * FROM system.app_user WHERE can_edit_views IS %s', 
> (None,))

The only way I could get it to work:

cur.execute(sql.SQL("select 'f' IS {}").format(sql.SQL('TRUE')))

or

cur.execute(sql.SQL("select 'f' IS {}").format(sql.SQL(str(True))))

cur.fetchone() 
 

(False,)

cur.execute(sql.SQL("select 'f' IS {}").format(sql.SQL('NULL'))) 
 


cur.fetchone() 
 
                            (False,)

> 
> Switching to psycopg 3 i have to consider many more differences than i 
> expected
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com



psycopg by date:

Previous
From: Christophe Pettus
Date:
Subject: Re: Query with boolean parameter
Next
From: Paolo De Stefani
Date:
Subject: Re: Query with boolean parameter