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] <mailto:[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] <mailto:[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] <mailto:[email protected]>
Santiago-Chile
------------------------------------------------------------------------
_______________________________________________
Python-es mailing list
[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/