У меня есть таблица базы данных с уникальным строковым полем и несколькими целыми полями. Поле строки обычно составляет 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) и выполнять ее, но я не знаю, улучшит ли она что-нибудь.
Есть ли у вас предложение оптимизировать такой процесс?
Спасибо