nobodynoone
@nobodynoone

Как можно осуществить массовое добавление в PonyORM?

Привет. Как можно осуществить массовое добавление в PonyORM?

Т.е.
В DJangoORM есть метод `bulk_create`, который позволяет добавить сразу пачку одним запросом.
В SQLAlchemy есть метод `add_all`, который позволяет добавить сразу пачку одним запросом.

Как такое можно сделать в PonyORM?
  • Вопрос задан
  • 2459 просмотров
Пригласить эксперта
Ответы на вопрос 1
@metaprogrammer
Добрый день! Я автор Pony ORM.
Краткий ответ: Такой функцональности пока нет, но мы не прочь в ближайшее время ее добавить. Будет здорово если вы откроете на эту тему issue на гитхабе: https://github.com/ponyorm/pony/issues/

Подробный ответ:
Насколько я понимаю, метод `bulk_create` в Django делает не совсем то же самое что метод `add_all` в Алхимии. `bulk_create` добивается двух целей:
1) Посылает все инсерты в базу в одной транзакции
2) По возможности посылает все эти инсерты в одном запросе

В SQLAlchemy `add_all` добавляет все новые объекты в сессию. В дальнейшем в процессе выполнения коммита все эти объекты будут сохранены в рамках текущей транзакции. Но за то, посылать все эти инсерты в одном общем запросе или нет `add_all` не отвечает.

В PonyORM такой метод как `add_all` просто не нужен, потому что добавление объекта в сессию происходит автоматически во время создания объекта. При этом все инсерты автоматически будут выполнены в рамках одной транзакции, а не как в Django по умолчанию. Значит, всё чего не хватает - это чтобы инсерты шли в одной общей команде `executemany`.

Но я думаю что для этого не нужно делать какой-то метод. Будет правильнее и проще, если PonyORM сама распознает, что серию идущих подряд инсертов можно выполнить в одном общем запросе. При этом API никак не меняется, а просто добавляется некая внутренняя оптимизация.

Я готов это добавить, но не на этой неделе, потому что прямо сейчас я плотно занимаюсь поддержкой третьего Питона, и надеюсь что через несколько дней выйдет новый релиз, в котором эта поддержка появится. После этого я готов добавить `bulk_insert`, если кто-нибудь сделает соответствующую напоминалку в виде issue на Гитхабе: https://github.com/ponyorm/pony/issues
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы