Обновление на основе промежуточного запроса в SQLAlchemy

#sqlalchemy

#sqlalchemy

Вопрос:

Я новичок в SQLAlchemy, и мне любопытно, как я мог бы выполнить следующее UPDATE .

Я использую язык выражений SQL, и моя версия SQLAlchemy 1.3.16 . Я написал запрос, который возвращает [после некоторой фильтрации и тому подобного] следующие два столбца более крупной таблицы, которую я вызову my_table .

  -------------- ----- 
|team_member_id|id   |
 -------------- ----- 
|3738          |7172 |
|2752          |1016 |
|3738          |7173 |
|3738          |7174 |
|3738          |7175 |
|3738          |7176 |
|3738          |7178 |
|3738          |7177 |
|140           |6679 |
|3568          |7221 |
|3568          |7220 |
...
 

Есть третий столбец ( final_col ) my_table , который я хотел бы обновить на основе этих двух столбцов.

В принципе, для каждой (team_member_id, id) пары выше я хотел бы установить значение строки final_col team_member_id равным значению. id остается прежним; это просто первичный ключ.

Как бы я это сделал?

Ответ №1:

Я нашел однажды возможное решение в виде bindparam .

     update_executed_by = my_table.update().where(my_table.c.id == bindparam('_id')).values(
        final_col=bindparam('_team_member_id'))
    bound_params = [{'_team_member_id': row[0], '_id': row[1]} for row in session.execute(get_team_members)]
    session.execute(update_executed_by, bound_params)