LIKE pyPqSQL SOLUCIONADO
Marcos Sánchez Provencio
rapto en arrakis.es
Mar Feb 22 16:09:11 CET 2005
Ésa es demasiado fácil:
Si la cadena buscada es c, para empalmar % a los dos lados se usa:
c = '%' + c + '%'
Si sólo quieres empalmarlo al final:
c = c + '%'
¿Cuál era la pregunta?
FERNANDO VILLARROEL dijo:
> Funciona pero me devielve una lista vacia, pese a que
> por la cadena que busco existe en la base de datos,
> creo que se debe a que la clausula like debe ir
> acompanada de %, me explico deberia ser
>
> where like 'fernando%'
>
> Asi funciona en Postgres, como le adjunto el signo %
> al final de la cadena a buscar entonces.
> --- Marcos Sánchez Provencio <rapto en arrakis.es> wrote:
>
>> 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
>> >
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en aditel.org
>> http://listas.aditel.org/listinfo/python-es
>>
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Meet the all-new My Yahoo! - Try it today!
> http://my.yahoo.com
>
>
> _______________________________________________
> 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