实现这一点的一种方法是为应该更新的ID创建一个
我在python fastapi项目中使用SQLAlchemy作为ORM。我有一个端点,它正在更新表中的几行。但是,我只希望在联接表中的字段设置为false时更新这些行。
很遗憾,.Update方法不支持.Join((。
我的代码如下:
@Session
async def update_special_user_id(session: AsyncSession, old_user_id: str, user_id: str):
await session.execute(
update(SpecialUsers)
.join(Users)
.where(Users.is_claimed.is_(False))
.where(SpecialUsers.user_id == old_user_id)
.values({"user_id": user_id})
)
CCD_ 1在这里以与CCD_ 2的FK关系加入。如果Users记录中有字段is_claimed == False
,我只想更新SpecialUsers中的user_id
我看过,但没有用。我发现的大多数关于SQLAlchemy的帖子都很旧,而且在1.0中发生了变化。
有什么想法吗?
我的后端正在运行postgres
SELECT
,并将其用作UPDATE
中IN
子句的左侧。
这是同步代码,但异步版本应该相同。
with Session() as s, s.begin():
selectable = (
sa.select(SpecialUsers.id)
.join(Users)
.where(Users.is_claimed.is_(False))
.where(SpecialUsers.user_id == old_user_id)
)
s.execute(
sa.update(SpecialUsers)
.where(SpecialUsers.id.in_(selectable))
.values({'user_id': user_id})
.execution_options(synchronize_session='fetch')
)
此处讨论synchronize_session
执行选项。