LIKE pyPqSQL SOLUCIONADO

Marcos Sánchez Provencio rapto en arrakis.es
Mar Feb 22 14:08:50 CET 2005


Parece que te sobran las comillas:
like '%s' "
es
like %s "

FERNANDO VILLARROEL dijo:
> Chema el problema es que como tu me sugeries me da
> problemas a nivel de libpq:
>
> o, incluso mejor, utiliza parámetros en el query:
>
> q="select a.cclte, a.razonsocial,a.direccion,
>   a.telefono1, b.descripcion \
>   from cltescred as a, comunas as b  \
>   where a.ccomuna=b.ccomuna and a.razonsocial \
>   like '%s' "
>
> cur.execute(q, (self.rzd,) )
>
> Aca va el error
>
> Traceback (most recent call last):
>   File "like.py", line 10, in ?
>     cur.execute(q,(c,))
>   File
> "/usr/lib/python2.3/site-packages/pyPgSQL/PgSQL.py",
> line 3072, in execute
>     raise OperationalError, msg
> libpq.OperationalError: ERROR:  syntax error at or
> near "vilna" at character 157
> Aca el script de prueba:
>
> c="vilna"
> q="select a.razonsocial,b.descripcion from cltescred
> as a, comunas as b \
> where a.ccomuna=b.ccomuna and a.razonsocial like '%s'
> "
> cur.execute(q,(c,))
>
> A que se debera?
> --- Chema Cortes <lslorg en ls-l.org> wrote:
>
>> Quoting FERNANDO VILLARROEL <fvillarroel en yahoo.com>:
>>
>> > Hola lo solucione de la siguiente forma:
>> >
>> > self.rzd (es la cadena a buscar)
>> >
>> > c=self.rzd+'%'
>> >
>> >  q="select a.cclte, a.razonsocial,a.direccion,
>> > a.telefono1, b.descripcion \
>> > from cltescred as a, comunas as b  \
>> > where a.ccomuna=b.ccomuna and a.razonsocial \
>> > like '%s' " % c
>> >
>> > cur.execute(q)
>> >
>> > y listo la clave esta en la concatenacion de la
>> cadena
>> > a buscar + "%"
>>
>> Aunque funcione, no es demasiado correcto hacerlo
>> así. El problema que
>> tenías es
>> porque en el patrón que usas en el LIKE acaba con el
>> símbolo '%'. Al
>> añadir otro
>> símbolo, estás "escapando" el % para que no sea
>> interpretado como parte de la
>> cadena de formato.
>>
>> Pero en el LIKE también podría tener el % al inicio,
>> caso que no consideras.
>>
>> La mejor solución es "escapar" todos los %:
>>
>> c=self.rzd.replace("%","%%")
>>
>> o, incluso mejor, utiliza parámetros en el query:
>>
>> q="select a.cclte, a.razonsocial,a.direccion,
>>   a.telefono1, b.descripcion \
>>   from cltescred as a, comunas as b  \
>>   where a.ccomuna=b.ccomuna and a.razonsocial \
>>   like '%s' "
>>
>> cur.execute(q, (self.rzd,) )
>>
>>
>>
>>
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - Find what you need with new enhanced search.
> http://info.mail.yahoo.com/mail_250
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




Más información sobre la lista de distribución Python-es