[Python-es] Para que se usa el "%"

Andrey Antoukh andsux en gmail.com
Mar Nov 23 19:54:56 CET 2010


El día 23 de noviembre de 2010 19:17, Gustavo Cabral
<gmcabral en gmail.com> escribió:
> El día 23 de noviembre de 2010 14:20, Luis Miguel Morillas
> <morillas en gmail.com> escribió:
>> El día 23 de noviembre de 2010 15:34, Gustavo Cabral
>> <gmcabral en gmail.com> escribió:
>>> Hola:
>>> Soy nuevo en esto y leí algunos artículos para comenzar con Python,
>>> pero necesito con urgencia entender que significa el % en el código,
>>> para ser más claro, tengo este pedazo de código, el cual retorna unos
>>> valores de una BD, pero no logro entender para que se usa el "%":
>>>
>>> for i in ids:
>>>        #get the id of the current function of the employee of identifier "i"
>>>        sql_req= """
>>>        SELECT f.id AS func_id
>>>        FROM hr_contract c
>>>          LEFT JOIN res_partner_function f ON (f.id = c.function)
>>>        WHERE
>>>          (c.employee_id = %d)
>>>        """ % (i,)
>>>
>>> Me podrían ayudar con esto? no entiendo el uso del "%"
>>> Muchas Gracias.
>>>
>>
>>
>> El ejemplo está incompleto, pero me parece un poco raro. Como te
>> comentan el "%" es un operador de sustitución de cadenas pero NO se
>> debe de utilizar en las cadenas que se mandan a execute de un cursor
>> si estás trabajando con bases de datos. Aquí tienes una explicación
>> http://wiki.python.org/moin/DbApiFaq#HowdoIpassparameterstothecursor.executemethod.3F
>> Si trabajas con bases de datos, tienes que usar el paramstyle del
>> conector que estás usando. Y si vas a realizar múltiples consultas,
>> mejor usar executemany que una serie encadenadas de execute, como
>> parece que va a lanzar el ejemplo.
>
> Muchas Gracias, el código completo sería así:
>
> 1.    for i in ids:
> 2.        #get the id of the current function of the employee of identifier "i"
> 3.        sql_req= """
> 4.        SELECT f.id AS func_id
> 5.        FROM hr_contract c
> 6.          LEFT JOIN res_partner_function f ON (f.id = c.function)
> 7.        WHERE
> 8.          (c.employee_id = %d)
> 9.        """ % (i,)
> 10.      cr.execute(sql_req)
> 11.      sql_res = cr.dictfetchone()
>
> Y según lo que me decís, la línea 9 del código tendría que ser:
>
> 9. """ , (i,)
>
> ¿Es cierto esto?
>
>
> --
>
> Linux es Libertad
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
Casi me da un infarto al ver este código... pero alguien aquí ha
prestado atención en clase?
Me refiero a que volvemos al mismo tema, sin informarse sin tener ni
idea de lo que habla ni lo que se pregunta...

Y lo que menos comprendo entender es que parece que a la gente a
propósito le parece mejor ser menos eficiente...
Cuanto tarda uno en escribir un mensaje, recibir respuesta, escribir
otro por que no ha quedado claro... etc, en comparación a leer
una documentación que lo dice todo:

http://wiki.python.org/moin/DatabaseProgramming/
http://wiki.python.org/moin/DbApiFaq

Por favor... usen la cabeza... que para algo han nacido con ella.
Entiendo perfectamente que no se nace con los conocimientos pero creo
que si tienes un poco de logica, sabes que si insertas en una cadena
sql una variable que puede contener x cosa, esa variable puede tener
datos maliciosos, por lo que uno debe pensar bien claro que las cosas
de esa manera no se hacen y debe existir otra manera... Por lo que en
adelante no preguntas para que sirve "%" si no que preguntas como
pasas los parametros a una cadena SQL.

Aun asi seria una pregunta tonta, ya que poniendo "python bases de
datos" en google la primera respuesta es:
http://mundogeek.net/archivos/2008/06/25/bases-de-datos-en-python/

Y explica claramente como funciona todo el tema de DB-API2 en
castellano. Por lo que el tiempo gastado en todas esas respuestas es
absolutamente inutil... he tardado mas en escribir este mensaje que en
encontrat todo este material didactico...

En fin... una vez mas espero que no se ofendan ya que creo que es una
critica bastante constructiva.
Un saludo.



-- 
http://twitter.com/andsux
http://www.niwi.be
****
http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"


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