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
<[email protected]>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 <[email protected]>*wrote:
>
>
> From: gerardo Juarez <[email protected]>
> Subject: Re: [Python-es] 'int' does not support the buffer interface
> To: "La lista de python en castellano" <[email protected]>
> 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 <
> [email protected] <http://mc/[email protected]> <mailto:
> [email protected] <http://mc/[email protected]>>> 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
> >     [email protected] <http://mc/[email protected]><mailto:
> [email protected] <http://mc/[email protected]>>
> >     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
> > [email protected] <http://mc/[email protected]> <mailto:
> [email protected] <http://mc/[email protected]>>
> > Santiago-Chile
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Python-es mailing list
> > [email protected] <http://mc/[email protected]>
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> >
>
> _______________________________________________
> Python-es mailing list
> [email protected] <http://mc/[email protected]>
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
> _______________________________________________
> Python-es mailing list
> [email protected]
> 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
//////////////////////////////////////////////////////////////////////////
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a