postgresql 使用SQLAlchemy ORM在更新查询中使用条件进行批量更新

iqxoj9l9  于 2023-03-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(216)

我正在尝试进行批量更新,其中我在更新查询中有一个条件。我有一个ID列表,我想用数据库中old_valueif old_valuenotNone中的字符串更新new_value。如果old_value的值为None,我想使用'default_value'字符串
我找不到任何相关的信息,我想可能是一个案例,但我不知道如何格式化查询。

class MyTable(BaseModel):
    id = sa.Column(sa.String(256))
    new_value = sa.Column(sa.String(256))
    old_value = sa.Column(sa.String(256))
LIST_OF_IDS = [1,2,5,6]

update_query = db.session.query(MyTable).filter(MyTable.id.in_(LIST_OF_IDS)) \
     .update(dict(new_value=MyTable.old_value if MyTable.old_value else 'default_value'))
rqcrx0a6

rqcrx0a61#

你可以使用sqlalchemy case结构创建一个update查询,然后你可以简单地使用session.execute()

from sqlalchemy import update, case
update_query = (
    update(MyTable)
    .where(MyTable.id.in_(LIST_OF_IDS))
    .values(
        new_value=case(
            (MyTable.old_value.isnot(None), MyTable.old_value), else_="default_value"
    )
)

相关问题