Я пытался найти эффективный способ одновременного обновления нескольких записей в 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 *.Я проверю это в ближайшее время.