SQLAlchemy Обновление нескольких полей у нескольких объектов одним запросом к базе данных
У меня есть список объектов модели Category, у которых изменились поля name, parent_id и archive, и мне нужно обновить эти объекты в базе данных. Сейчас я делаю это циклом - получаю объект из базы по id, задаю новые значения полей и обновляю объект. Это не оптимальный вариант и хотелось бы узнать, как я могу сделать это одним запросом к базе данных?
def update(id: int, instance: Category) -> None:
instance.id = id
instance = session.merge(instance)
session.commit()
return instance
def update_categories(categorues_to_update: list[Category]):
for category_to_update in categories_to_update:
category = session.execute(select(Category).where(Category.id==category_to_update.id))
category.name = category_to_update.name
category.parent_id = category_to_update.parent_id
category.archive = category_to_update.archive
update(category.id, category)
Источник: Stack Overflow на русском