Si tiene que insertar una gran cantidad de datos, ¿por qué está tratando de insertarlos todos en un solo insert
? (Esto cargará innecesariamente su memoria al hacer esta gran cadena insert
y también mientras la ejecuta. Tampoco esta es una solución muy buena si los datos que va a insertar son muy grandes)
¿Por qué no hacer? usted pone una fila por comando insert
en el DB y pone todas las filas usando un for...loop
y compromete todos los cambios al final?
con = mysqldb.connect(
host="localhost",
user="user",
passwd="**",
db="db name"
)
cur = con.cursor()
for data in your_data_list:
cur.execute("data you want to insert: %s" %data)
con.commit()
con.close()
(Créanme, esto es muy rápido, pero si usted está consiguiendo resultados más lentos, entonces significa que su autocommit
debe haber True
.Establecerlo en False
como msw
dice.)
Comenzando con 1.2.0, MySQLdb deshabilita la confirmación automática de forma predeterminada, como lo exige el estándar DB-API (PEP-249). fuente: http://mysql-python.sourceforge.net/FAQ.html – mikewaters
Si sientes que tus insertos son aún más lentos de lo que deberían ser, asegúrate de modificar también la configuración de tu servidor mysql. En mi caso, mi 'innodb_buffer_pool_size' era demasiado pequeño para mis tamaños de transacción y al aumentarlo logré una aceleración de + 40% para inserciones masivas. Ver: https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.html – jlh