Re: [Python-es] ¿Para que están usando (o han usado) ustedes Python?
Para cálculos en bioinformática y biofísica. Así como desarrollar GUI para esos temas... (en esto último ando flojo) ___ 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] 'int' does not support the buffer interface
Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ 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] 'int' does not support the buffer interface
Hola Te estás haciendo t mismo un sql injection. Seguramente, si tienes apóstrofes en los datos, casque. Repasa la documentación de uso de parámetros en DB-API. Prueba def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (%s,%s) curs = conn.cursor() try: curs.execute(query, (autor, texto)) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) El lun, 21-02-2011 a las 04:40 -0800, Spectrum Cuarenta y ocho k escribió: query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s \) % (texto, autor) ___ 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 están usando (o han usado) ustedes Python?
Yo estoy iniciando en su uso y específicamente en el area de SIG combinado con ArcGis. 2011/2/9 Spectrum Cuarenta y ocho k s_...@yahoo.com La idea de este hilo es saber que cosas están haciendo (o han hecho) la gente de la lista con Python y si usan el lenguaje de forma profesional o solo para trabajos personales. Empiezo yo: Por lo pronto estoy empezando y estoy realizando una aplicación gráfica a nivel personal para la recogida de datos mediante un formulario y su posterior comparación mediante gráficas. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- Rubiela A. Garcia E. Analista SIG / Programadora MIDA - PRONAZA --- Three grand essentials to happiness in this life are something to do, something to love, and something to hope for (Gen.R.Odierno:) ___ 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] 'int' does not support the buffer interface
Ese no debe ser el problema, hay muchas con apóstrofes y entran sin problemas. Las dobles comillas las escapo en otra parte del código, antes de pasárselo a esa función. Si fuera eso, fallaría siempre, y solo ejecutaría el error. De hecho, cuando pasa eso, da un error distinto y no te deja insertar la fila. Lo raro de esto, es que solo pasa depués de un tiempo de estar metiendo filas, y aunque sigue funcionando (entran en la tabla, por lo que se intuye que no hay error) se mete en el try y lo ejecuta todo. Después de reiniciar el ordenata, filas que antes marcaban error, ahora no lo marcan, sin haber hecho cambios sobre el código. Gracias de todas maneras. --- On Mon, 2/21/11, Marcos Sánchez Provencio ra...@arrakis.es wrote: From: Marcos Sánchez Provencio ra...@arrakis.es Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 1:23 PM Hola Te estás haciendo t mismo un sql injection. Seguramente, si tienes apóstrofes en los datos, casque. Repasa la documentación de uso de parámetros en DB-API. Prueba def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (%s,%s) curs = conn.cursor() try: curs.execute(query, (autor, texto)) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) El lun, 21-02-2011 a las 04:40 -0800, Spectrum Cuarenta y ocho k escribió: query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s \) % (texto, autor) ___ 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] 'int' does not support the buffer interface
De todas formas, la interpolación de variables en un comando SQL es una práctica suficientemente mala como para que estemos seguros que ese no es el problema (http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters). Lo mismo que dice esta liga más o menos se dice en relación con MySQLdb. En tu caso, pudiera estarse generando una condición acumulativa que después de cierto tiempo de trabajo te da el error. Yo recomendaría tres acciones: - cambiar la sintaxis como sugiere Marco y reintentar. - ver si el error está adscrito a una línea en particular o asegurarse cuál es la última línea que se ejecuta. - verificar qué tipos tienen las columnas text y author en la tabla de la base y en el código del programa. Si puedes enviar esos datos a la lista, probablemente pudiéramos tener otra pista o sugerencia. saludos Gerardo Spectrum Cuarenta y ocho k wrote: Ese no debe ser el problema, hay muchas con apóstrofes y entran sin problemas. Las dobles comillas las escapo en otra parte del código, antes de pasárselo a esa función. Si fuera eso, fallaría siempre, y solo ejecutaría el error. De hecho, cuando pasa eso, da un error distinto y no te deja insertar la fila. Lo raro de esto, es que solo pasa depués de un tiempo de estar metiendo filas, y aunque sigue funcionando (entran en la tabla, por lo que se intuye que no hay error) se mete en el try y lo ejecuta todo. Después de reiniciar el ordenata, filas que antes marcaban error, ahora no lo marcan, sin haber hecho cambios sobre el código. Gracias de todas maneras. --- On *Mon, 2/21/11, Marcos Sánchez Provencio /ra...@arrakis.es/* wrote: From: Marcos Sánchez Provencio ra...@arrakis.es Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 1:23 PM Hola Te estás haciendo t mismo un sql injection. Seguramente, si tienes apóstrofes en los datos, casque. Repasa la documentación de uso de parámetros en DB-API. Prueba def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (%s,%s) curs = conn.cursor() try: curs.execute(query, (autor, texto)) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) El lun, 21-02-2011 a las 04:40 -0800, Spectrum Cuarenta y ocho k escribió: query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s \) % (texto, autor) ___ Python-es mailing list Python-es@python.org /mc/compose?to=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/ ___ 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] 'int' does not support the buffer interface
Buenas! Es un error extraño, generalmente relacionado con buffers y el wrapping de c/c++ ... si nos das más datos sobre lo que utilizas igual suena más. Seguramente la excepción es inocua ya que te deja hacer el commit y te lo deja hacer bien, pero mejor investigar :) Varios apuntes: - Hacer un except Exception siempre es mala idea :) - El finally se ejecutará siempre, por lo que al hacer ahí el commit te arriesgas a hacerlo sobre un bloque que ha generado excepción. Casualmente, a ti te ha funcionado, pero no es lo habitual. 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ 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] 'int' does not support the buffer interface
debes de usar el metodo refresh para los datos si la base se bloquea no podras insertar nada ademas usa algo asi self.con.autocommit(True) El 21 de febrero de 2011 09:40, Spectrum Cuarenta y ocho k s_...@yahoo.comescribió: Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- Miguel Zamora M. Programador en Computacion e Informatica 08-1351249 mzmp...@gmail.com Santiago-Chile ___ 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] 'int' does not support the buffer interface
Hola: Si te fijas tengo el commit dentro de un if(cur), de esa manera, si el cursor, que es lo que tengo detro del try, falla, no se crearía el cur y por lo tanto tampoco se haría el commit() ¿Porqué dices lo del 'except Exception' por ser demasiado general? Lo único que estoy utilizando es el módulo PyMySQL (porque fue el primero que encontré para python 3) de resto nada especial, leo unas cadenas de un fichero, y se las paso al la función que les he puesto. Ahí estoy mirando en San Google a ver que ponen de la excepción, pero hay poquito, aunque tiene toda la pinta a ser algo de buffers como tú apuntas. Gracias. --- On Mon, 2/21/11, marmolro marmo...@gmail.com wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 4:31 PM Buenas! Es un error extraño, generalmente relacionado con buffers y el wrapping de c/c++ ... si nos das más datos sobre lo que utilizas igual suena más. Seguramente la excepción es inocua ya que te deja hacer el commit y te lo deja hacer bien, pero mejor investigar :) Varios apuntes:Hacer un except Exception siempre es mala idea :)El finally se ejecutará siempre, por lo que al hacer ahí el commit te arriesgas a hacerlo sobre un bloque que ha generado excepción. Casualmente, a ti te ha funcionado, pero no es lo habitual. 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -Inline Attachment Follows- ___ 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] 'int' does not support the buffer interface
No me había fijado que el commit lo hace por cada registro. Por lo que nos describe, la tarea que se ejecuta para procesar unos 2 registros parece ser una tarea 'batch'. Como tal, sería mejor tal vez procesar todos los registros y hasta el final aplicar el commit(), de lo contrario es como sugiere Miguel aquí abajo, de mejor poner la base en autocommit(). Claro, esto hará que se tarde muchísimo, en comparación de aplicar el commit al final. Por otra parte, no sé si siquiera el commit() esté haciendo algo, porque (está usando Mysql correcto?) entonces el 'storage-engine' por omisión es MyISAM y éste no tiene transacciones, por lo cual permite pero ignora silenciosamente los 'commits'. Para poder usarlo, debería estar la tabla en cuestión almacenada con InnoDb, y la base en un modo que sea distinto de autocommit. Entonces sí tendría sentido el commit y creo que debería ser al final de los 2 registros y no con cada uno, salvo un requerimiento muy especial que no conocemos. Otra posibilidad es que está usando PyMysql, que es un módulo relativamente nuevo. No convendría probar con Mysqldb, que es ya muy estable y ver si el error se repite? Igual hay que reportar un problema. saludos Gerardo miguel zamora m. wrote: debes de usar el metodo refresh para los datos si la base se bloquea no podras insertar nada ademas usa algo asi self.con.autocommit(True) El 21 de febrero de 2011 09:40, Spectrum Cuarenta y ocho k s_...@yahoo.com mailto:s_...@yahoo.com escribió: Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org mailto:Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- Miguel Zamora M. Programador en Computacion e Informatica 08-1351249 mzmp...@gmail.com mailto:mzmp...@gmail.com Santiago-Chile ___ 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] 'int' does not support the buffer interface
Hola Gerardo. Si uso MySql. Había puesto el commit por cada registro para que si había algún fallo, por lo menos, tener guardado lo que iba pasando a la base de datos y no perderlo todo. Pero apunto el tema de ponerlo al final, para que haga todos los registros a la vez y mejorar el rendimiento. En cuanto al módulo Mysqldb, me pareció entender que no había para python 3, por eso usé PyMySQL. Y como bien dices, es posible que sea un fallo del módulo. Gracias y un saludo. --- On Mon, 2/21/11, gerardo Juarez gerardojua...@buyteknet.info wrote: From: gerardo Juarez gerardojua...@buyteknet.info Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 6:17 PM No me había fijado que el commit lo hace por cada registro. Por lo que nos describe, la tarea que se ejecuta para procesar unos 2 registros parece ser una tarea 'batch'. Como tal, sería mejor tal vez procesar todos los registros y hasta el final aplicar el commit(), de lo contrario es como sugiere Miguel aquí abajo, de mejor poner la base en autocommit(). Claro, esto hará que se tarde muchísimo, en comparación de aplicar el commit al final. Por otra parte, no sé si siquiera el commit() esté haciendo algo, porque (está usando Mysql correcto?) entonces el 'storage-engine' por omisión es MyISAM y éste no tiene transacciones, por lo cual permite pero ignora silenciosamente los 'commits'. Para poder usarlo, debería estar la tabla en cuestión almacenada con InnoDb, y la base en un modo que sea distinto de autocommit. Entonces sí tendría sentido el commit y creo que debería ser al final de los 2 registros y no con cada uno, salvo un requerimiento muy especial que no conocemos. Otra posibilidad es que está usando PyMysql, que es un módulo relativamente nuevo. No convendría probar con Mysqldb, que es ya muy estable y ver si el error se repite? Igual hay que reportar un problema. saludos Gerardo miguel zamora m. wrote: debes de usar el metodo refresh para los datos si la base se bloquea no podras insertar nada ademas usa algo asi self.con.autocommit(True) El 21 de febrero de 2011 09:40, Spectrum Cuarenta y ocho k s_...@yahoo.com mailto:s_...@yahoo.com escribió: Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org mailto:Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- Miguel Zamora M. Programador en Computacion e Informatica 08-1351249 mzmp...@gmail.com mailto:mzmp...@gmail.com Santiago-Chile ___ 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/ ___ 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] 'int' does not support the buffer interface
Hola, ¿Primero de todo puedes enviar la cadena mesaje del fallo: + str(errr) para ver que tipo de excepción devuelve?, ¿es siempre el mismo? Normalmente la clausula finally se utiliza para liberar recursos independientemente de si se ha producido o no una excepción, por lo que no es recomendable hacer el commit en ella. Quizas sea mejor hacer una secuencia tipo: try, excerpt, else (con el commit) y finally (para cerrar el cursor si lo creas dentro de la función) sobretodo con tantas inserciones. Un saludo El 21 de febrero de 2011 19:45, Spectrum Cuarenta y ocho k s_...@yahoo.comescribió: Hola Gerardo. Si uso MySql. Había puesto el commit por cada registro para que si había algún fallo, por lo menos, tener guardado lo que iba pasando a la base de datos y no perderlo todo. Pero apunto el tema de ponerlo al final, para que haga todos los registros a la vez y mejorar el rendimiento. En cuanto al módulo Mysqldb, me pareció entender que no había para python 3, por eso usé PyMySQL. Y como bien dices, es posible que sea un fallo del módulo. Gracias y un saludo. --- On *Mon, 2/21/11, gerardo Juarez gerardojua...@buyteknet.info*wrote: From: gerardo Juarez gerardojua...@buyteknet.info Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 6:17 PM No me había fijado que el commit lo hace por cada registro. Por lo que nos describe, la tarea que se ejecuta para procesar unos 2 registros parece ser una tarea 'batch'. Como tal, sería mejor tal vez procesar todos los registros y hasta el final aplicar el commit(), de lo contrario es como sugiere Miguel aquí abajo, de mejor poner la base en autocommit(). Claro, esto hará que se tarde muchísimo, en comparación de aplicar el commit al final. Por otra parte, no sé si siquiera el commit() esté haciendo algo, porque (está usando Mysql correcto?) entonces el 'storage-engine' por omisión es MyISAM y éste no tiene transacciones, por lo cual permite pero ignora silenciosamente los 'commits'. Para poder usarlo, debería estar la tabla en cuestión almacenada con InnoDb, y la base en un modo que sea distinto de autocommit. Entonces sí tendría sentido el commit y creo que debería ser al final de los 2 registros y no con cada uno, salvo un requerimiento muy especial que no conocemos. Otra posibilidad es que está usando PyMysql, que es un módulo relativamente nuevo. No convendría probar con Mysqldb, que es ya muy estable y ver si el error se repite? Igual hay que reportar un problema. saludos Gerardo miguel zamora m. wrote: debes de usar el metodo refresh para los datos si la base se bloquea no podras insertar nada ademas usa algo asi self.con.autocommit(True) El 21 de febrero de 2011 09:40, Spectrum Cuarenta y ocho k s_...@yahoo.com http://mc/compose?to=s_...@yahoo.com mailto: s_...@yahoo.com http://mc/compose?to=s_...@yahoo.com escribió: Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org http://mc/compose?to=Python-es@python.orgmailto: Python-es@python.org http://mc/compose?to=Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -- Miguel Zamora M. Programador en Computacion e Informatica 08-1351249 mzmp...@gmail.com http://mc/compose?to=mzmp...@gmail.com mailto: mzmp...@gmail.com http://mc/compose?to=mzmp...@gmail.com Santiago-Chile
Re: [Python-es] 'int' does not support the buffer interface
Porqué no pruebas con (sólo para obtener el Traceback) : curs = None try: curs = conn.cursor() if curs: curs.execute(query) curs.close() conn.commit() print(OK!) else: class SinCursorException(BaseException): pass raise SinCursorException except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) raise si te miras en: http://code.google.com/p/pymysql/source/browse/trunk/pymysql/err.py son los errors que te podria dar ... La verdad es que falta un poco de contexto y sus razones abrá pero con algo mas o menos ... def insertar(miConn, autor, texto): query = INSERT INTO famous_quote (...) curs = miConn.cursor() ... ... te permitiria testear EMHO algo mejor el codigo de la funcion en seco ... Suerte On 02/21/2011 07:45 PM, Spectrum Cuarenta y ocho k wrote: curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ 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] 'int' does not support the buffer interface
Hola, el mensaje de error es el que figura en el título de email: 'int' does not support the buffer interface Fíjate que tengo un if(cur) dentro del finally de esa forma solo se ejecuta cuando es necesario. Un saludo. --- On Mon, 2/21/11, Eduard Diaz eventgra...@gmail.com wrote: From: Eduard Diaz eventgra...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 7:31 PM Hola, ¿Primero de todo puedes enviar la cadena mesaje del fallo: + str(errr) para ver que tipo de excepción devuelve?, ¿es siempre el mismo? Normalmente la clausula finally se utiliza para liberar recursos independientemente de si se ha producido o no una excepción, por lo que no es recomendable hacer el commit en ella. Quizas sea mejor hacer una secuencia tipo: try, excerpt, else (con el commit) y finally (para cerrar el cursor si lo creas dentro de la función) sobretodo con tantas inserciones. Un saludo El 21 de febrero de 2011 19:45, Spectrum Cuarenta y ocho k s_...@yahoo.com escribió: Hola Gerardo. Si uso MySql. Había puesto el commit por cada registro para que si había algún fallo, por lo menos, tener guardado lo que iba pasando a la base de datos y no perderlo todo. Pero apunto el tema de ponerlo al final, para que haga todos los registros a la vez y mejorar el rendimiento. En cuanto al módulo Mysqldb, me pareció entender que no había para python 3, por eso usé PyMySQL. Y como bien dices, es posible que sea un fallo del módulo. Gracias y un saludo. --- On Mon, 2/21/11, gerardo Juarez gerardojua...@buyteknet.info wrote: From: gerardo Juarez gerardojua...@buyteknet.info Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 6:17 PM No me había fijado que el commit lo hace por cada registro. Por lo que nos describe, la tarea que se ejecuta para procesar unos 2 registros parece ser una tarea 'batch'. Como tal, sería mejor tal vez procesar todos los registros y hasta el final aplicar el commit(), de lo contrario es como sugiere Miguel aquí abajo, de mejor poner la base en autocommit(). Claro, esto hará que se tarde muchísimo, en comparación de aplicar el commit al final. Por otra parte, no sé si siquiera el commit() esté haciendo algo, porque (está usando Mysql correcto?) entonces el 'storage-engine' por omisión es MyISAM y éste no tiene transacciones, por lo cual permite pero ignora silenciosamente los 'commits'. Para poder usarlo, debería estar la tabla en cuestión almacenada con InnoDb, y la base en un modo que sea distinto de autocommit. Entonces sí tendría sentido el commit y creo que debería ser al final de los 2 registros y no con cada uno, salvo un requerimiento muy especial que no conocemos. Otra posibilidad es que está usando PyMysql, que es un módulo relativamente nuevo. No convendría probar con Mysqldb, que es ya muy estable y ver si el error se repite? Igual hay que reportar un problema. saludos Gerardo miguel zamora m. wrote: debes de usar el metodo refresh para los datos si la base se bloquea no podras insertar nada ademas usa algo asi self.con.autocommit(True) El 21 de febrero de 2011 09:40, Spectrum Cuarenta y ocho k s_...@yahoo.com mailto:s_...@yahoo.com escribió: Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org mailto:Python-es@python.org
Re: [Python-es] 'int' does not support the buffer interface
La excepción está en el título: 'int' does not support the buffer interface --- On Mon, 2/21/11, marmolro marmo...@gmail.com wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 7:51 PM Buenas! en el correo 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com Hola: Si te fijas tengo el commit dentro de un if(cur), de esa manera, si el cursor, que es lo que tengo detro del try, falla, no se crearía el cur y por lo tanto tampoco se haría el commit() Realmente el cursor se crea con conn.cursor(), que está fuera del try, con lo que el if(cur) es inocuo. De todas formas, compruebas su creación, no su estado.. ¿Porqué dices lo del 'except Exception' por ser demasiado general? Sí, demasiado general... como el comentario mio ;). En este caso yo prefiero que me salte la excepción hasta afuera con toda la información (¿que excepción es?¿cual es su traceback?)... Lo único que estoy utilizando es el módulo PyMySQL (porque fue el primero que encontré para python 3) de resto nada especial, leo unas cadenas de un fichero, y se las paso al la función que les he puesto. pega el traceback y la excepción así podemos ver por donde se queja (este módulo creo que era 100% python, así que en principio nada que ver con wrappers... ¿o sí?) Ahí estoy mirando en San Google a ver que ponen de la excepción, pero hay poquito, aunque tiene toda la pinta a ser algo de buffers como tú apuntas. Gracias. --- On Mon, 2/21/11, marmolro marmo...@gmail.com wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 4:31 PM Buenas! Es un error extraño, generalmente relacionado con buffers y el wrapping de c/c++ ... si nos das más datos sobre lo que utilizas igual suena más. Seguramente la excepción es inocua ya que te deja hacer el commit y te lo deja hacer bien, pero mejor investigar :) Varios apuntes:Hacer un except Exception siempre es mala idea :)El finally se ejecutará siempre, por lo que al hacer ahí el commit te arriesgas a hacerlo sobre un bloque que ha generado excepción. Casualmente, a ti te ha funcionado, pero no es lo habitual. 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -Inline Attachment Follows- ___ 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/ -Inline Attachment Follows- ___ 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] 'int' does not support the buffer interface
Buenas! ese es el mensaje, no la excepción :) Añade un raise al final del bloque except: y se ve el traceback y la excepción. Respecto al finally echa un ojo a: http://docs.python.org/tutorial/errors.html#defining-clean-up-actions simplemente para ver que se ejecuta *siempre*, con independencia de si saltó la excepción o no Un saludo, Marc 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com La excepción está en el título: 'int' does not support the buffer interface --- On *Mon, 2/21/11, marmolro marmo...@gmail.com* wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 7:51 PM Buenas! en el correo 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com Hola: Si te fijas tengo el commit dentro de un if(cur), de esa manera, si el cursor, que es lo que tengo detro del try, falla, no se crearía el cur y por lo tanto tampoco se haría el commit() Realmente el cursor se crea con conn.cursor(), que está fuera del try, con lo que el if(cur) es inocuo. De todas formas, compruebas su creación, no su estado.. ¿Porqué dices lo del 'except Exception' por ser demasiado general? Sí, demasiado general... como el comentario mio ;). En este caso yo prefiero que me salte la excepción hasta afuera con toda la información (¿que excepción es?¿cual es su traceback?)... Lo único que estoy utilizando es el módulo PyMySQL (porque fue el primero que encontré para python 3) de resto nada especial, leo unas cadenas de un fichero, y se las paso al la función que les he puesto. pega el traceback y la excepción así podemos ver por donde se queja (este módulo creo que era 100% python, así que en principio nada que ver con wrappers... ¿o sí?) Ahí estoy mirando en San Google a ver que ponen de la excepción, pero hay poquito, aunque tiene toda la pinta a ser algo de buffers como tú apuntas. Gracias. --- On *Mon, 2/21/11, marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com * wrote: From: marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.orghttp://mc/compose?to=python-es@python.org Date: Monday, February 21, 2011, 4:31 PM Buenas! Es un error extraño, generalmente relacionado con buffers y el wrapping de c/c++ ... si nos das más datos sobre lo que utilizas igual suena más. Seguramente la excepción es inocua ya que te deja hacer el commit y te lo deja hacer bien, pero mejor investigar :) Varios apuntes: - Hacer un except Exception siempre es mala idea :) - El finally se ejecutará siempre, por lo que al hacer ahí el commit te arriesgas a hacerlo sobre un bloque que ha generado excepción. Casualmente, a ti te ha funcionado, pero no es lo habitual. 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally: if(curs): curs.close() conn.commit() print(OK!) ___ Python-es mailing list Python-es@python.org http://mc/compose?to=Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ -Inline Attachment Follows- ___ Python-es mailing list Python-es@python.org http://mc/compose?to=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
Re: [Python-es] 'int' does not support the buffer interface
Este es el traceback: Traceback (most recent call last): File C:\Users\marcelo\Desktop\prueba_archivos.py, line 53, in module leeQuote(n_archivo_, principio_, final_, principio_t, final_t) File C:\Users\marcelo\Desktop\prueba_archivos.py, line 46, in leeQuote insertar(autor, cita) File C:\Users\marcelo\Desktop\prueba_archivos.py, line 18, in insertar curs.execute(query) File C:\Python31\pymysql\cursors.py, line 108, in execute self.errorhandler(self, exc, value) File C:\Python31\pymysql\connections.py, line 182, in defaulterrorhandler raise Error(errorclass, errorvalue) pymysql.err.Error: (class 'TypeError', TypeError('int' does not support the buffer interface,)) Un saludo. --- On Mon, 2/21/11, marmolro marmo...@gmail.com wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 8:07 PM Buenas! ese es el mensaje, no la excepción :) Añade un raise al final del bloque except: y se ve el traceback y la excepción. Respecto al finally echa un ojo a: http://docs.python.org/tutorial/errors.html#defining-clean-up-actions simplemente para ver que se ejecuta *siempre*, con independencia de si saltó la excepción o no Un saludo,Marc 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com La excepción está en el título: 'int' does not support the buffer interface --- On Mon, 2/21/11, marmolro marmo...@gmail.com wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 7:51 PM Buenas! en el correo 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com Hola: Si te fijas tengo el commit dentro de un if(cur), de esa manera, si el cursor, que es lo que tengo detro del try, falla, no se crearía el cur y por lo tanto tampoco se haría el commit() Realmente el cursor se crea con conn.cursor(), que está fuera del try, con lo que el if(cur) es inocuo. De todas formas, compruebas su creación, no su estado.. ¿Porqué dices lo del 'except Exception' por ser demasiado general? Sí, demasiado general... como el comentario mio ;). En este caso yo prefiero que me salte la excepción hasta afuera con toda la información (¿que excepción es?¿cual es su traceback?)... Lo único que estoy utilizando es el módulo PyMySQL (porque fue el primero que encontré para python 3) de resto nada especial, leo unas cadenas de un fichero, y se las paso al la función que les he puesto. pega el traceback y la excepción así podemos ver por donde se queja (este módulo creo que era 100% python, así que en principio nada que ver con wrappers... ¿o sí?) Ahí estoy mirando en San Google a ver que ponen de la excepción, pero hay poquito, aunque tiene toda la pinta a ser algo de buffers como tú apuntas. Gracias. --- On Mon, 2/21/11, marmolro marmo...@gmail.com wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 4:31 PM Buenas! Es un error extraño, generalmente relacionado con buffers y el wrapping de c/c++ ... si nos das más datos sobre lo que utilizas igual suena más. Seguramente la excepción es inocua ya que te deja hacer el commit y te lo deja hacer bien, pero mejor investigar :) Varios apuntes:Hacer un except Exception siempre es mala idea :)El finally se ejecutará siempre, por lo que al hacer ahí el commit te arriesgas a hacerlo sobre un bloque que ha generado excepción. Casualmente, a ti te ha funcionado, pero no es lo habitual. 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try. Me explico, inserta el registro,imprime el OK, pero también me ejecuta lo que está dentro del try y pone este error: 'int' does not support the buffer interface. Por lo tanto, sigue realizando su función pero enseña el error. Si reinicio el ordenador y vuelvo a ejecutarlo (exactamente el mismo código) ya no da el error. Me da la impresión que es algún buffer de python. ¿a alguien le suena algo de esto o parecido? Venga, un saludo. def insertar(autor, texto): query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() try: curs.execute(query) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) pass finally:
Re: [Python-es] 'int' does not support the buffer interface
Apostaría que el error está en alguna c-api, pero no sabría decirte más puedes probar con http://code.google.com/p/pymysql/issues/list. De todas formas intenta lo que te ha comentado la gente: reutiliza el cursor y haz commit cada n registros insertados. Igual al no requerir tanto del commit no caes en ese bug Un saludo, marmolro 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.com Este es el traceback: Traceback (most recent call last): File C:\Users\marcelo\Desktop\prueba_archivos.py, line 53, in module leeQuote(n_archivo_, principio_, final_, principio_t, final_t) File C:\Users\marcelo\Desktop\prueba_archivos.py, line 46, in leeQuote insertar(autor, cita) File C:\Users\marcelo\Desktop\prueba_archivos.py, line 18, in insertar curs.execute(query) File C:\Python31\pymysql\cursors.py, line 108, in execute self.errorhandler(self, exc, value) File C:\Python31\pymysql\connections.py, line 182, in defaulterrorhandler raise Error(errorclass, errorvalue) pymysql.err.Error: (class 'TypeError', TypeError('int' does not support the buffer interface,)) Un saludo. --- On *Mon, 2/21/11, marmolro marmo...@gmail.com* wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 8:07 PM Buenas! ese es el mensaje, no la excepción :) Añade un raise al final del bloque except: y se ve el traceback y la excepción. Respecto al finally echa un ojo a: http://docs.python.org/tutorial/errors.html#defining-clean-up-actions simplemente para ver que se ejecuta *siempre*, con independencia de si saltó la excepción o no Un saludo, Marc 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com La excepción está en el título: 'int' does not support the buffer interface --- On *Mon, 2/21/11, marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com * wrote: From: marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.orghttp://mc/compose?to=python-es@python.org Date: Monday, February 21, 2011, 7:51 PM Buenas! en el correo 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com Hola: Si te fijas tengo el commit dentro de un if(cur), de esa manera, si el cursor, que es lo que tengo detro del try, falla, no se crearía el cur y por lo tanto tampoco se haría el commit() Realmente el cursor se crea con conn.cursor(), que está fuera del try, con lo que el if(cur) es inocuo. De todas formas, compruebas su creación, no su estado.. ¿Porqué dices lo del 'except Exception' por ser demasiado general? Sí, demasiado general... como el comentario mio ;). En este caso yo prefiero que me salte la excepción hasta afuera con toda la información (¿que excepción es?¿cual es su traceback?)... Lo único que estoy utilizando es el módulo PyMySQL (porque fue el primero que encontré para python 3) de resto nada especial, leo unas cadenas de un fichero, y se las paso al la función que les he puesto. pega el traceback y la excepción así podemos ver por donde se queja (este módulo creo que era 100% python, así que en principio nada que ver con wrappers... ¿o sí?) Ahí estoy mirando en San Google a ver que ponen de la excepción, pero hay poquito, aunque tiene toda la pinta a ser algo de buffers como tú apuntas. Gracias. --- On *Mon, 2/21/11, marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com * wrote: From: marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.orghttp://mc/compose?to=python-es@python.org Date: Monday, February 21, 2011, 4:31 PM Buenas! Es un error extraño, generalmente relacionado con buffers y el wrapping de c/c++ ... si nos das más datos sobre lo que utilizas igual suena más. Seguramente la excepción es inocua ya que te deja hacer el commit y te lo deja hacer bien, pero mejor investigar :) Varios apuntes: - Hacer un except Exception siempre es mala idea :) - El finally se ejecutará siempre, por lo que al hacer ahí el commit te arriesgas a hacerlo sobre un bloque que ha generado excepción. Casualmente, a ti te ha funcionado, pero no es lo habitual. 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com Hola gente, he hecho un programa para insertar registros en una BD. Son bastantes, y lo estoy haciendo por tramos de 20.000 más o menos (de forma individual, vamos que hago correr el script cada 2). El caso, es que funciona bastante bien, pero cuando llevo 3 o 4 partes, sigue funcionando... pero se salta el try.
Re: [Python-es] 'int' does not support the buffer interface
def insertar(autor, texto): try: query = INSERT INTO famous_quote (text, author) VALUES (\%s\, \%s\) % (texto, autor) curs = conn.cursor() curs.execute(query) if(curs): conn.autocommit(true) curs.close() print(OK!) except Exception as errr: print(mesaje del fallo: + str(errr)) print(Fallo en: + query) # guarda esto en un log pass # --- esto no lo haria ya que no sabria donde se cayo no es mucho lo que describes de tu programa ¿pertenece a una clase ? Creo que la solucion es trabajar en base a test para python tienes muchas posibilidades de crear aplicaciones robustas y controlando los errores y dejando un minimo margen para bugs o mantenciones es parte de una buena practica de programacion y te aseguro que todo funcionara excelente yo por mi parte trabajo en python 2.7 en ubuntu busca si la libreria que usas tiene bugs El 21 de febrero de 2011 17:57, Spectrum Cuarenta y ocho k s_...@yahoo.comescribió: Gracias. --- On *Mon, 2/21/11, marmolro marmo...@gmail.com* wrote: From: marmolro marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.org Date: Monday, February 21, 2011, 8:44 PM Apostaría que el error está en alguna c-api, pero no sabría decirte más puedes probar con http://code.google.com/p/pymysql/issues/list. De todas formas intenta lo que te ha comentado la gente: reutiliza el cursor y haz commit cada n registros insertados. Igual al no requerir tanto del commit no caes en ese bug Un saludo, marmolro 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com Este es el traceback: Traceback (most recent call last): File C:\Users\marcelo\Desktop\prueba_archivos.py, line 53, in module leeQuote(n_archivo_, principio_, final_, principio_t, final_t) File C:\Users\marcelo\Desktop\prueba_archivos.py, line 46, in leeQuote insertar(autor, cita) File C:\Users\marcelo\Desktop\prueba_archivos.py, line 18, in insertar curs.execute(query) File C:\Python31\pymysql\cursors.py, line 108, in execute self.errorhandler(self, exc, value) File C:\Python31\pymysql\connections.py, line 182, in defaulterrorhandler raise Error(errorclass, errorvalue) pymysql.err.Error: (class 'TypeError', TypeError('int' does not support the buffer interface,)) Un saludo. --- On *Mon, 2/21/11, marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com * wrote: From: marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.orghttp://mc/compose?to=python-es@python.org Date: Monday, February 21, 2011, 8:07 PM Buenas! ese es el mensaje, no la excepción :) Añade un raise al final del bloque except: y se ve el traceback y la excepción. Respecto al finally echa un ojo a: http://docs.python.org/tutorial/errors.html#defining-clean-up-actions simplemente para ver que se ejecuta *siempre*, con independencia de si saltó la excepción o no Un saludo, Marc 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com La excepción está en el título: 'int' does not support the buffer interface --- On *Mon, 2/21/11, marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com * wrote: From: marmolro marmo...@gmail.comhttp://mc/compose?to=marmo...@gmail.com Subject: Re: [Python-es] 'int' does not support the buffer interface To: La lista de python en castellano python-es@python.orghttp://mc/compose?to=python-es@python.org Date: Monday, February 21, 2011, 7:51 PM Buenas! en el correo 2011/2/21 Spectrum Cuarenta y ocho k s_...@yahoo.comhttp://mc/compose?to=s_...@yahoo.com Hola: Si te fijas tengo el commit dentro de un if(cur), de esa manera, si el cursor, que es lo que tengo detro del try, falla, no se crearía el cur y por lo tanto tampoco se haría el commit() Realmente el cursor se crea con conn.cursor(), que está fuera del try, con lo que el if(cur) es inocuo. De todas formas, compruebas su creación, no su estado.. ¿Porqué dices lo del 'except Exception' por ser demasiado general? Sí, demasiado general... como el comentario mio ;). En este caso yo prefiero que me salte la excepción hasta afuera con toda la información (¿que excepción es?¿cual es su traceback?)... Lo único que estoy utilizando es el módulo PyMySQL (porque fue el primero que encontré para python 3) de resto nada especial, leo unas cadenas de un fichero, y se las paso al la función que les he puesto. pega el traceback y la excepción así podemos ver por donde se queja (este módulo creo que era 100% python, así que en principio nada que ver con
Re: [Python-es] 'int' does not support the buffer interface
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Para dar con el problema necesitaríamos realizar más pruebas y ver algo más de código. En una epifanía, se me ocurre que igual tienes algún problema con la codificación de caracteres. ¿Cómo has creado las tablas? ¿cómo creas la conexión? ¿cómo procesas las cadenas antes de enviarlas a mysql? PyMysql usa por defecto latin1 para conectarse, mientras que el servidor mysql5 espera unicode (ucs2/utf8) por defecto. Si no te has preocupado por ello, es posible que las conversiones y reconversiones que se estén produciendo saquen de madre a alguno de los accesos a rawbytes de pymysql. Comprueba que tablas y conexión estén usando la misma codificación. -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJNYw2QAAoJEFdWyBWwhL4FMQEIAJfDvUtTJmtQ+NYeg2maCqDI 3Msjo5xuKL/DcJWAfNPKdNKh8fA3KQY4jIgut/uJMTWXTLHl5vonYxpx+pd1d9gA i/P4lwW8aFgYsz7Cs7YXep5BMyj9i46FQ9PNqrS2cV4TfEckJ8GIZO+0hEy5Jbd9 J3nRdlcWitQH+Xq8HWr+PiXr36ROzo5cfnu54c1WctKFYWny9dXaGjJm+ovIbHeB UxwbkL/JQsokSsNVjtqHILk7oiq57ORcIV8WzXmqBThVvoiP/0h0E1SnjFsTX3xr t897CeUdqBS1FfxAB6bNkohQRexgvGJCDmKZjAwSHOr3IemdIX2RSV6kFkuPpcw= =trDz -END PGP SIGNATURE- ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/