CONFLICT (id) DO UPDATE , но для большой пачки объектов. Для этой задачи, я так понимаю session.add_all не подходит?
Такое есть https://docs.sqlalchemy.org/en/20/dialects/postgresql.html#insert-on-conflict-upsert
Жаль, что это реализация только для одной записи. Как использовать для нескольких записей не нашёл
Тебе bulk insert нужен?
Не особо понял, что такое булк. Если это загрузка из файла, то нет. Мне нужно из памяти сразу несколько(<=100) объектов записать или обновить, если есть конфликты.
insert может принимать несколько значений, вроде придется Core использовать, вот что нашёл https://stackoverflow.com/questions/57929168/sqlalchemy-fast-bulk-upsert-from-another-table
Кажется это совсем в другую степь. Но там показано, что можно список словарей прокинуть в values(), теперь осталось понять, как прокинуть его в on_conflict_do_update
У values вызывай этот метод, там же вызван похожий/соседний из доки
insert(User) .values(**insert_dict) .on_conflict_do_update( index_elements=(User.id,), set_=update_dict, where=User.id == aiogram_user.id ) .returning(User) Я его и вызываю у values, вот реализация для одного словаря. Я не понимаю, как прокинуть список словарей в on_conflict_do_update()
Обсуждают сегодня