SQL Alchemy - ВСТАВИТЬ результаты запроса - PullRequest
2 голосов
/ 15 августа 2011

Я ищу способ в SQLAlchemy выполнить массовую INSERT, строки которой являются результатом запроса. Я знаю, что у сеанса есть функция add, которую можно использовать для добавления отдельного объекта, но я не могу понять, как он работает с подзапросом.

Я знаю, что могу перебрать результаты подзапроса и add по отдельности, но это может показаться неэффективным. В моем случае я имею дело с потенциально очень большим набором данных, которые необходимо вставить.

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Я вижу следующие опции:

  1. с использованием SA Model : создавать базовые объекты с данными, загруженными из базы данных, добавлять их в сеанс и фиксировать.
    • Плюсы: если у вас есть какая-либо проверка на уровне модели AS, вы можете использовать ее;также вы можете вставить в несколько таблиц, если моделируемые объекты сопоставлены с несколькими таблицами ( Наследование объединенных таблиц ); не зависит от СУБД
    • Минусы: самые дорогие
  2. с использованием операторов вставки : загрузка данных из базы данных в python и выполнениеиспользование Вставка выражений
  3. создавать данные, используя только RDBMS : массовая вставка с использованием RDBMS, минуя SA и Python в целом
    • Плюсы: быстрый
    • Минусы: проверка бизнес-объекта не выполнена;потенциально требуется специфичная для СУБД реализация

Я бы предложил вариант 1) или 3).
Фактически, если у вас нетпроверка объекта и вы используете только одну RDBMS, я бы придерживался опции 3) .

0 голосов
/ 16 августа 2011

Я считаю, что единственный способ сделать это в SQLAlchemy - это выполнить необработанный оператор SQL, используя Session.execute

...