Как эффективно обновить несколько строк и столбцов в одном запросе с помощью SQLAlchemy? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытался найти эффективный способ одновременного обновления нескольких записей в Postgres с использованием SQLAlchemy.Большинство ответов, которые я нашел в stackoverflow и в официальной документации , показывают примеры обновления всех строк одного столбца с использованием метода update() в API Query.Например:

session.query(User).filter(User.age == 25).\
    update({"age": User.age + 1})

Однако я не хочу выполнять простую операцию, например, увеличивать все числа в столбце на 1. Я хочу обновить все строки в запросе, но хочу передатьчто представляют собой обновленные значения в формате, таком как приведенный ниже:

updates = [{"user_id": 4, "new_age": 36}, {"user_id": 7, "new_age": 42}]

Я закончил тем, что сделал что-то вроде этого:

for update in updates:
    session.query(User).filter(User.id == update["user_id"]).update({User.id: update["new_age"]})
    session.commit()

Теперь это не похоже на "объем"«обновление», но это именно то, что описывается в документации update() к API-интерфейсу Query API : :

Выполните запрос массового обновления.

Обновляет строкисоответствует этому запросу в базе данных.

А также следующее предостережение:

Метод Query.update () - это «массовая» операция, которая обходит ORMавтоматизация единицы работы в пользу большей производительности.

Что действительно делает его звучащим так, как будто оно может обрабатывать массовые обновления.Так я что-то упустил?

PS Я пытаюсь выяснить, может ли мне помочь здесь документация по массовым операциям 1038 *.Я проверю это в ближайшее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...