[Python-es] Para que se usa el %

2010-11-23 Por tema Gustavo Cabral
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.

Gustavo.-
-- 

Linux es Libertad
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Para que se usa el %

2010-11-23 Por tema Oscar Carballal Prego

El 23/11/2010, a las 15:34, Gustavo Cabral 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.

Gustavo


Que me corrija alguien que sepa, pero yo lo conozco por operador de  
sustitución.


Sustituye el operador % y el tipo (s, d) por el contenido de una  
variable o operación determinada.


Ejemplo:

a = persona
print Hola %s % (s)

Salida: Hola persona

El operador de sustitución admite diferentes tipos de datos, entre  
ellos cadenas de texto (s), numérico (d), flotantes etc.


Ejemplo:

print Dos mas dos son: %d % (2+2)

Salida: Dos mas dos son: 4

Se pueden poner varios operadores de sustitución en la misma cadena.  
Así como otras tantas cosas más, pero deberías leerte algún manual,  
viene explicado en todos.


Un saludo,
Oscar Carballal

___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Para que se usa el %

2010-11-23 Por tema Gustavo Cabral
El día 23 de noviembre de 2010 11:54, Oscar Carballal Prego
oscar.carbal...@gmail.com escribió:
 El 23/11/2010, a las 15:52, Oscar Carballal Prego escribió:

 Ejemplo:

 a = persona
 print Hola %s % (s)

 Salida: Hola persona

 Cometí un error en ese ejemplo, la línea print sería

 print Hola %s % (a)

Perfecto ejemplo, es decir que se usa para pasar el valor a una
cadena de texto. Disculpen mi ignorancia, pero si lo comparo con otro
lenguaje donde:

a = persona
print Hola   a

¿Es lo mismo?
-- 

Linux es Libertad
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Para que se usa el %

2010-11-23 Por tema Oscar Carballal Prego


El 23/11/2010, a las 15:59, Gustavo Cabral escribió:


El día 23 de noviembre de 2010 11:54, Oscar Carballal Prego
oscar.carbal...@gmail.com escribió:

El 23/11/2010, a las 15:52, Oscar Carballal Prego escribió:


Ejemplo:

a = persona
print Hola %s % (s)

Salida: Hola persona


Cometí un error en ese ejemplo, la línea print sería

print Hola %s % (a)


Perfecto ejemplo, es decir que se usa para pasar el valor a una
cadena de texto. Disculpen mi ignorancia, pero si lo comparo con otro
lenguaje donde:

a = persona
print Hola   a

¿Es lo mismo?
--  


Es parecido, el operador de sustitución permite incorporar valores de  
varios tipos a la cadena, sin embargo, usando el operador  sólo se  
pueden unir si son del mismo tipo, es parecido a usar el operador de  
suma en python.


Esto sería correcto:

a = persona
print Hola  + a

Esto no funcionaría:

a = 4
print Somos  + a

Al ser a un entero no se pude añadir a una cadena, sin embargo:

a = 4
print Somos  + str(a)

Sí es válido, porque hemos convertido a a una cadena antes de  
añadirlo a la otra cadena.


Un saludo
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Para que se usa el %

2010-11-23 Por tema Sergio Soto Núñez
patron = %s + %s = %s 
 print patron %( 3, 2, 3+2)
3 + 2 = 5

__
If it WalksLikeaDuck and talks like a duck, it must be a duck. David Thomas


2010/11/23 Ricardo Cárdenes Medina ricardo.carde...@gmail.com



 2010/11/23 Oscar Carballal Prego oscar.carbal...@gmail.com

  Esto no funcionaría:

 a = 4
 print Somos  + a

 Al ser a un entero no se pude añadir a una cadena, sin embargo:


 Sin embargo, esto sí funcionaría:

 a = 4
 print Somos, a

 El operador % de sustitución (render) se utiliza específicamente en casos
 en que quieras dar un formato concreto a la cadena de texto resultante. Si
 no es así, puede no ser necesario usarlo.

 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Para que se usa el %

2010-11-23 Por tema Ricardo Cárdenes Medina
2010/11/23 Gustavo Cabral gmcab...@gmail.com



 Y según lo que me decís, la línea 9 del código tendría que ser:

 9.  , (i,)

 ¿Es cierto esto?


No. Tienes una cadena de formato (el %d dentro de ella representa a un
entero), así que tendrás que usar el operador % para pasarle los argumentos
que tienen que ser sustituidos.

De todas maneras, como ya te han comentado, en casos como éste de bases de
datos en el que necesitas validar la entrada, es mejor NO usar directamente
%. En su lugar, los módulos que te permiten acceder a bases de datos
incorporan funciones para pasar los parámetros a una cadena de formato y ya
se encargan de hacer conversiones y poner caracteres de escape en donde
corresponda.

La idea es evitar cosas como los ataques de inyección SQL.
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Para que se usa el %

2010-11-23 Por tema Andrey Antoukh
El día 23 de noviembre de 2010 19:17, Gustavo Cabral
gmcab...@gmail.com escribió:
 El día 23 de noviembre de 2010 14:20, Luis Miguel Morillas
 moril...@gmail.com escribió:
 El día 23 de noviembre de 2010 15:34, Gustavo Cabral
 gmcab...@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@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
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Para que se usa el %

2010-11-23 Por tema Gustavo Cabral
El día 23 de noviembre de 2010 15:38, Ricardo Cárdenes Medina
ricardo.carde...@gmail.com escribió:


 2010/11/23 Ricardo Cárdenes Medina ricardo.carde...@gmail.com

 La idea es evitar cosas como los ataques de inyección SQL.

 Nota: y no solo ataques. Imagina esto:
    sql = UPDATE usuarios SET nombre='%s' WHERE id = %d
    sql % (O'neill, 15)
   UPDATE usuarios SET nombre='O'neill' WHERE id = 15
 Como verás, hay un error de sintaxis. Y aquí ni siquiera tenemos a un
 atacante, sino una entrada de datos válida.
 En general el problema es al trabajar con cadenas de texto, por ejemplo, que
 tienen que ir delimitadas (no es un problema con números), pero es mejor
 acostumbrarse a no usar % para estas cosas en ningún caso y así evitamos
 tentaciones y problemas.

Muchas Gracias, me queda más que claro.



-- 

Linux es Libertad
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/