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/
