При вставке нескольких строк в базу данных MySQL -с помощью оператора SQLA -Expression -Language, например.
Foo.__table__.insert().execute([{'bar': 1}, {'bar': 2}, {'bar': 3}])
это чрезвычайно медленно по сравнению с выполнением «сырого» оператора sql для той же задачи, т.е.
engine.execute("insert into foo (bar) values (1),(2),(3)")
Что является причиной этого? Разве SQLA не может сгенерировать один оператор массовой вставки и, следовательно, выполнить несколько вставок? Из-за ограничений скорости orm мне нужен быстрый способ добавить несколько тысяч строк одновременно, но версия SQLA -Expression -Language -слишком медленная. Итак, мне нужно написать необработанный sql самостоятельно? Документация не слишком ясна по этому поводу.
Я провел тест скорости со вставкой ORM,ORM с предварительно назначенным PK и массовой вставкой SQLA (см. Скорость массовой вставки SQLA)вот так(https://gist.github.com/3341940):
Как видите, разницы между тремя версиями практически нет. Значительно быстрее выполняется только вставка необработанной строки, когда все записи включены в необработанный оператор sql. Таким образом, для быстрых вставок SQLA кажется менее -оптимальным.