[Python-es] 'int' does not support the buffer interface

Spectrum Cuarenta y ocho k s_48k en yahoo.com
Lun Feb 21 20:51:38 CET 2011


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 <eventgrafic en gmail.com> wrote:

From: Eduard Diaz <eventgrafic en gmail.com>
Subject: Re: [Python-es] 'int' does not support the buffer interface
To: "La lista de python en castellano" <python-es en 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_48k en 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 <gerardojuarez en buyteknet.info> wrote:



From: gerardo Juarez <gerardojuarez en buyteknet.info>


Subject: Re: [Python-es] 'int' does not support the buffer interface
To: "La lista de python en
 castellano" <python-es en 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 20000 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 20000 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_48k en yahoo.com <mailto:s_48k en 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
>     20000). 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 en python.org <mailto:Python-es en 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
> mzmprog en gmail.com <mailto:mzmprog en gmail.com>


> Santiago-Chile
> 
>
 ------------------------------------------------------------------------
> 
> _______________________________________________
> Python-es mailing list
> Python-es en python.org


> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/


>   

_______________________________________________
Python-es mailing list
Python-es en python.org
http://mail.python.org/mailman/listinfo/python-es


FAQ: http://python-es-faq.wikidot.com/



      
_______________________________________________

Python-es mailing list

Python-es en python.org

http://mail.python.org/mailman/listinfo/python-es

FAQ: http://python-es-faq.wikidot.com/





-- 
//////////////////////////////////////////////////////////////////////////
Eduard Díaz
www.scopia.es
SCOPIA VISUAL INTERFACES SYSTEMS S.L.


Barcelona
Tel. 625 055 126, 933 171 771
//////////////////////////////////////////////////////////////////////////


-----Inline Attachment Follows-----

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



      
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110221/f765dc75/attachment.html>


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