Согласно psycopg2: вставьте несколько строк одним запросом, это гораздо более эффективно использовать execute psycopg2 вместо executemany . Другие могут подтвердить?
Приведенный выше вопрос StackOverflow предлагает использовать mogrify для создания утверждений типа:
INSERT INTO table VALUES (value1, value2), (value3, value4)
Можно ли сгенерировать такой оператор с помощью обычной функции execute? Я думал что-то в форме
cursor.execute("""INSERT INTO table VALUES (%s, %s), (%s, %s)""", ((value1,value2),(value3,value4)))
должно сработать.
ОБНОВИТЬ:
Например, я попытался перейти к выполнению инструкции sql:
insert into history (timestamp) values (%s),(%s);
со следующим кортежем:
(('2014-04-27 14:07:30.000000',), ('2014-04-27 14:07:35.000000',))
но все, что я получил, было ошибкой:
нет результатов для получения
executemany
вpsycopg2
, хотя и только до определенного момента — если вы вставляете десятки тысяч строк на оператор, использование памяти становится проблемой. Партии в несколько сотен или пару тысяч (если ряды меньше) могут подойти. - person Craig Ringer   schedule 27.04.2014