Estoy usando Python y su módulo MySQLdb para importar algunos datos de medición en una base de datos Mysql. La cantidad de datos que tenemos es bastante alta (actualmente aproximadamente ~ 250 MB de archivos csv y mucho más por venir).Python + MySQLdb executemany
Actualmente utilizo cursor.execute (...) para importar algunos metadatos. Esto no es problemático ya que solo hay unas pocas entradas para estos.
El problema es que cuando intento utilizar cursor.executemany() para importar grandes cantidades de los datos de medición reales, MySQLdb plantea una
TypeError: not all arguments converted during string formatting
Mi código actual es
def __insert_values(self, values):
cursor = self.connection.cursor()
cursor.executemany("""
insert into values (ensg, value, sampleid)
values (%s, %s, %s)""", values)
cursor.close()
donde values
es una lista de tuplas que contienen tres cadenas cada una. Alguna idea de lo que podría estar mal con esto?
Editar:
Los valores son generados por
yield (prefix + row['id'], row['value'], sample_id)
y luego lee en una lista de mil en un momento en fila es iterador y procedentes de csv.DictReader
.
¿Ha verificado que los valores contienen los datos correctos? Como comentario adicional, debe considerar el uso de LOAD LOCAL DATA INFILE. Puede ser mucho más rápido. –
El problema es que los datos deben preprocesarse (lo que se hace actualmente en el mismo script de python) y no es muy viable crear copias redundantes de conjuntos de datos tan grandes. Los valores deberían estar bien ya que lo comprobé con un depurador. – lhahne