Thread: How do I use parameterized queries with LIKE?

How do I use parameterized queries with LIKE?

From
"W. Matthew Wilson"
Date:
This works just fine:

    cursor.execute("""select email_address from customer where
email_address like '%matt%'""")

But when I move the "matt" part out and use a %s symbol instead, I get
this error:

    ValueError: unsupported format character ''' (0x27) at index 73

What is the right solution here?

Thanks for the help.

Matt

--
W. Matthew Wilson
matt@tplus1.com
http://tplus1.com

Re: How do I use parameterized queries with LIKE?

From
Adrian Klaver
Date:
On 05/28/2012 03:00 PM, W. Matthew Wilson wrote:
> This works just fine:
>
>      cursor.execute("""select email_address from customer where
> email_address like '%matt%'""")
>
> But when I move the "matt" part out and use a %s symbol instead, I get
> this error:
>
>      ValueError: unsupported format character ''' (0x27) at index 73
>
> What is the right solution here?

http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries

So you need something like:

cursor.execute("""select email_address from customer where
 email_address like %s""", ("matt",))

Note in particular the ("matt",). The parameters in this form need to be passed
as a tuple.

>
> Thanks for the help.
>
> Matt
>


--
Adrian Klaver
adrian.klaver@gmail.com

Re: How do I use parameterized queries with LIKE?

From
Daniele Varrazzo
Date:
On Mon, May 28, 2012 at 11:00 PM, W. Matthew Wilson <matt@tplus1.com> wrote:

> But when I move the "matt" part out and use a %s symbol instead, I get
> this error:
>
>    ValueError: unsupported format character ''' (0x27) at index 73
>
> What is the right solution here?

If you have parameters in the query, % is used as placeholder prefix.
You must use %% to include a literal % in the query:

    In [14]: cur.execute("""select email_address from customer where
        email_address like '%%' || %s || '%%'""", ('matt',))

or you can add the % to the value instead of the query:

    In [17]: cur.execute("""select email_address from customer where
        email_address like %s""", ('%matt%',))

Hope this helps,

-- Daniele

Re: How do I use parameterized queries with LIKE?

From
"P. Christeas"
Date:
On Tuesday 29 May 2012, W. Matthew Wilson wrote:
> This works just fine:
>
>     cursor.execute("""select email_address from customer where
> email_address like '%matt%'""")

You'd probably need to escape the percent signs like:
cursor.execute("""select email_address from customer where email_address like
'%%matt%%'""")



--
Say NO to spam and viruses. Stop using Microsoft Windows!

Re: How do I use parameterized queries with LIKE?

From
"W. Matthew Wilson"
Date:
On Mon, May 28, 2012 at 6:42 PM, Daniele Varrazzo
<daniele.varrazzo@gmail.com> wrote:
> If you have parameters in the query, % is used as placeholder prefix.
> You must use %% to include a literal % in the query:
>
>    In [14]: cur.execute("""select email_address from customer where
>        email_address like '%%' || %s || '%%'""", ('matt',))
>
> or you can add the % to the value instead of the query:
>
>    In [17]: cur.execute("""select email_address from customer where
>        email_address like %s""", ('%matt%',))

Thanks so much!  I'm using the first solution, so that I can just
extract user-submitted data and pass it right in, rather than
prepending and appending '%' on the user data.

Matt



--
W. Matthew Wilson
matt@tplus1.com
http://tplus1.com

Re: How do I use parameterized queries with LIKE?

From
Federico Di Gregorio
Date:
On 29/05/12 02:30, W. Matthew Wilson wrote:
> On Mon, May 28, 2012 at 6:42 PM, Daniele Varrazzo
> <daniele.varrazzo@gmail.com> wrote:
>> > If you have parameters in the query, % is used as placeholder prefix.
>> > You must use %% to include a literal % in the query:
>> >
>> >    In [14]: cur.execute("""select email_address from customer where
>> >        email_address like '%%' || %s || '%%'""", ('matt',))
>> >
>> > or you can add the % to the value instead of the query:
>> >
>> >    In [17]: cur.execute("""select email_address from customer where
>> >        email_address like %s""", ('%matt%',))
> Thanks so much!  I'm using the first solution, so that I can just
> extract user-submitted data and pass it right in, rather than
> prepending and appending '%' on the user data.

If you're using user-submitted data remember to ALWAYS use bound
variables and never fallback to Python string interpolation: SQL
injection lurks.

federico

--
Federico Di Gregorio                         federico.digregorio@dndg.it
Studio Associato Di Nunzio e Di Gregorio                  http://dndg.it
  Gli avvoltoi cinesi si nutrono di arte, ma possono anche mangiare
   i `domani'.                                        -- Haruki Murakami

10.6 Mac build - Intel only

From
Brian Hamlin
Date:
Hi -

   I have a Mac 10.6, and I just downloaded XCode 3.2 from Apple dev
site.
** there is no custom install option in the XCode installer ** but I
am looking
at the package with Pacifist now.. Apparently Apple saw fit to remove
ppc libs

   pointing to pg_config is easy, and that is done

   But how do I build psycopg2 without arch ppc ?

   thanks in advance
     -Brian



Re: 10.6 Mac build - Intel only

From
Brian Hamlin
Date:
On May 30, 2012, at 8:51 PM, Brian Hamlin wrote:
>
>   I have a Mac 10.6, and I just downloaded XCode 3.2 from Apple dev
> site.
> ** there is no custom install option in the XCode installer ** but
> I am looking
> at the package with Pacifist now.. Apparently Apple saw fit to
> remove ppc libs
>
>   pointing to pg_config is easy, and that is done
>
>   But how do I build psycopg2 without arch ppc ?


for the record..
    (btw, searching briefly for archives of this mail list did find
anything obvious to me)
------------------------------------------------------------------------
-------------------------------------
Mac OS X  10.6  on intel - Postgres 9.1 + lots of goodies from
KyngChaos..

Install XCode 3.2 from Apple Dev Center

sudo easy_install pip  ## picks python 2.6 without aid

sudo ln -s /usr/local/pgsql-9.1/bin/pg_config /usr/bin/pg_config

sudo pip install psycopg2    ## <- gives a warning about arch ppc,
but **succeeds**

------------------------------------------------------------------------
-------------------------------------
   the psycopg2 version is very current too.. so I found a workaround..
but if someone knew how to build that would be handy..

   thanks for an excellent tool
     -Brian