[pyar] MySQLdb - Error con query

Alberto Leonhell Silveira Gazzano leonhell en gmail.com
Mar Feb 8 11:16:06 ART 2011


Ok, gracias pero no me muestra warnings, de todas formas convengamos que no
debería mostrar resultados igual.

Saludos

El 8 de febrero de 2011 11:07, Angel Freire <cuerty en gmail.com> escribió:

> 2011/2/8 Alberto Leonhell Silveira Gazzano <leonhell en gmail.com>:
> > Perdón, pero ahora que presto atención cuando ejecuto la misma consulta
> en
> > MYSQL también devuelve resultados:
> >
> > mysql> SELECT * FROM usuarios where nrodoc = '1234sdfgfs'
> >
> > Con lo cual el "problema" no sería en python...
> >
> > alguna sugerencia?
> >
> > El 8 de febrero de 2011 10:46, Facundo Batista <facundobatista en gmail.com
> >
> > escribió:
> >>
> >> 2011/2/8 Alberto Leonhell Silveira Gazzano <leonhell en gmail.com>:
> >>
> >> > Estimados, tengo un error bastante raro al consultar un DNI en una
> tabla
> >> > de
> >> > usuarios. Cuando ejecuto un query con c.execute("select nrodoc from
> >> > solicitante where nrodoc=%s", DNI) si tengo un nrodoc "1234" (por
> >> > ejemplo) y
> >> > consulto por el número de DNI "12345djfhsjadfh" (es decir 1234 más
> >> > letras)
> >> > la consulta me devuelve los registros correspondientes al DNI "1234"
> >> > (!!!??). Probé haciéndolo directamente sobre MySQL y no devuelve
> >> > resultados,
> >> > pero al hacerlo desde el módulo python sí.
> >> > El campo en la tabla es del tipo BIGINT y me ocurre esto no sólo con
> el
> >> > DNI
> >> > sino con todos los campos de este tipo.
> >>
> >> Si el campo es BIGINT, ¿cómo es que le pasás algo con *letras* en la
> >> búsqueda?
> >>
> >> Quizás te está mordiendo alguna conversión automágica de typos.
> >>
> >> Si teniendo 1234 le pasás 12345 (no "12345"), ¿qué pasa?
> >>
> >> Slds.
> >>
> >> --
> >> .    Facundo
> >>
> >> Blog: http://www.taniquetil.com.ar/plog/
> >> PyAr: http://www.python.org/ar/
> >> _______________________________________________
> >> pyar mailing list pyar en python.org.ar
> >> http://listas.python.org.ar/listinfo/pyar
> >>
> >> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
> >
> >
> > _______________________________________________
> > pyar mailing list pyar en python.org.ar
> > http://listas.python.org.ar/listinfo/pyar
> >
> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
> >
>
> El problema es que MySQL hace una conversión implícita del tipo de
> datos que le pasas (un varchar) a un numero (unsigned) para poder
> compararlo con un bigint:
>
> mysql> SELECT CAST('123asd' AS UNSIGNED);
> +----------------------------+
> | CAST('123asd' AS UNSIGNED) |
> +----------------------------+
> |                        123 |
> +----------------------------+
> 1 row in set, 1 warning (0.20 sec)
>
> Fijate que seguramente debes tener un warning después de ejecutar una
> query así, lo podes ver así:
>
> mysql> SHOW WARNINGS;
> +---------+------+---------------------------------------------+
> | Level   | Code | Message                                     |
> +---------+------+---------------------------------------------+
> | Warning | 1292 | Truncated incorrect INTEGER value: '123asd' |
> +---------+------+---------------------------------------------+
> 1 row in set (0.20 sec)
>
> Si lo que queres es que dado '123abc' no lo convierta a un numero para
> compararlo con un BIGINT podes convertir el campo de la tabla (el
> bigint) a un string usando CAST [0] pero ahí desaprovecharías
> cualquier indice que tuvieras sobre esa columna y de hecho harías un
> full table scan para encontrar todos los igualan esa condición. Te
> recomiendo ver el resultado de EXPLAIN [1] antes de poner una query
> así en producción.
>
> Saludos,
> Angel
>
> [0] http://dev.mysql.com/doc/refman/5.1/en/cast-functions.html
> [1] http://dev.mysql.com/doc/refman/5.1/en/explain.html
>
> --
> http://blog.cuerty.com
>
> "If you want to set off and go develop some grand new thing, you don't
> need millions of dollars of capitalization. You need enough pizza and
> Diet Coke to stick in your refrigerator, a cheap PC to work on and the
> dedication to go through with it."
> - John Carmack
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110208/644b3db7/attachment.html>


More information about the pyar mailing list