У меня есть таблица базы данных с уникальным строковым полем и парой целочисленных полей. Строковое поле обычно имеет длину 10-100 символов.
Примерно раз в минуту у меня возникает следующий сценарий: я получаю список из 2-10 тысяч кортежей, соответствующих структуре записи таблицы, например.
[("hello", 3, 4), ("cat", 5, 3), ...]
Мне нужно вставить все эти кортежи в таблицу (предположим, я проверил, что ни одна из этих строк не появляется в базе данных). Для пояснения, я использую InnoDB, и у меня есть автоинкрементный первичный ключ для этой таблицы, строка не является PK.
Мой код в настоящее время выполняет итерацию по этому списку, для каждого кортежа создает объект модуля Python с соответствующими значениями и вызывает «.save()», что-то вроде этого:
@transaction.commit_on_success
def save_data_elements(input_list):
for (s, i1, i2) in input_list:
entry = DataElement(string=s, number1=i1, number2=i2)
entry.save()
Этот код в настоящее время является одним из узких мест в моей системе, поэтому я ищу способы его оптимизации.
Например, я мог бы сгенерировать коды SQL, каждый из которых содержит команду INSERT для 100 кортежей («жестко закодированных» в SQL), и выполнить ее, но я не знаю, улучшит ли это что-нибудь.
Есть ли у вас какие-либо предложения по оптимизации такого процесса?
Спасибо