[Python-es] Para que se usa el %
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 %
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 %
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 %
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 %
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 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 %
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 %
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/