ОК, после некоторой борьбы я придумал:
session.query(
UserData
).filter(
UserData.id.in_(selected_ids)
).update(
{
'user_date': cast(func.concat(extract('year', UserData.user_date, type_=Date), '-01-01'), Date),
},
synchronize_session='fetch',
)
extract
не удавалось, пока я не привел тип данных, затем я создал новую строку даты и привел ее обратно к Date
.
Был еще один случай, когда поле также было Date
, но возвращенный тип данных был строковым (формат 2000-05-21
), поэтому это решение не сработало. Поэтому я решил это как обычный string
, взяв первые 4 цифры года с func.substr(UserData.user_date, 1, 4)
:
session.query(
UserData
).filter(
UserData.id.in_(selected_ids)
).update(
{
'user_date': func.concat(func.substr(UserData.user_date, 1, 4), '-01-01')),
},
synchronize_session='fetch',
)