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

Gustavo Cabral gmcabral en gmail.com
Mar Nov 23 19:17:48 CET 2010


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


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