Я использую Python и его модуль MySQLdb для импорта некоторых данных измерений в базу данных Mysql. Объем данных, который у нас есть, довольно высок (в настоящее время около ~ 250 МБ csv-файлов и еще много нового).Python + MySQLdb executemany
В настоящее время я использую cursor.execute (...) для импорта некоторых метаданных. Это не проблематично, так как для этого есть только несколько записей.
Проблема заключается в том, что, когда я пытаюсь использовать cursor.executemany() для импорта большего количества фактических данных измерений, MySQLdb поднимает
TypeError: not all arguments converted during string formatting
Мой текущий код
def __insert_values(self, values):
cursor = self.connection.cursor()
cursor.executemany("""
insert into values (ensg, value, sampleid)
values (%s, %s, %s)""", values)
cursor.close()
где values
- это список кортежей, содержащих по три строки. Любые идеи, что может быть неправильно с этим?
Edit:
Значение генерируется
yield (prefix + row['id'], row['value'], sample_id)
, а затем прочитать в список один тысяч в то время, когда строка является и итератором наступающей из csv.DictReader
.
Вы подтвердили, что значения содержат правильные данные? Как в стороне, вы должны посмотреть на использование LOAD LOCAL DATA INFILE. Это может быть намного быстрее. –
Проблема заключается в том, что данные должны быть предварительно обработаны (что в настоящее время выполняется в одном и том же сценарии python), и не очень эффективно создавать избыточные копии таких больших наборов данных. Значения должны быть в порядке, когда я проверил это с помощью отладчика. – lhahne