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

Luis Miguel Morillas morillas en gmail.com
Mar Nov 23 19:54:07 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?
>
>

Eso es, pero siempre asegurándote de paramstyle de la base de datos
que usas, que no todas utilizan el estilo 'format'.

-- lm
> --
>
> 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/
>


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