Re: Query with boolean parameter
От | Adrian Klaver |
---|---|
Тема | Re: Query with boolean parameter |
Дата | |
Msg-id | 321f190b-d65d-d2f7-d5bb-2ce72aa0b70d@aklaver.com обсуждение исходный текст |
Ответ на | Re: Query with boolean parameter (Paolo De Stefani <paolo@paolodestefani.it>) |
Список | 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 по дате отправления: