我有一个包含Date
的表格,我只需要将day
和month
部分日期设置为1
,并保留原始年份的一组ID。
所以我试图形成表达式(及其变体):
session.query(
UserData
).filter(
UserData.id.in_(selected_ids)
).update(
{
'user_date': cast((func.date_part('year', UserData.user_date), 1, 1), Date),
},
synchronize_session='fetch',
)
我根本无法做对。 帮助
答案 0 :(得分:0)
好的,经过一番挣扎,我想出了这个:
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
解决了这个问题,用func.substr(UserData.user_date, 1, 4)
取一年的前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',
)