You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQLAlchemy实现PostgreSQL关联库中无互阻Tods记录查询

解决方案:SQLAlchemy实现双向未屏蔽的Tods查询

要实现这个需求,核心是通过NOT EXISTS子查询排除存在单向屏蔽关系的记录,同时筛选出su_id为空的Tods行。假设当前要填充su_id的用户ID为current_user_id,具体查询代码如下:

from sqlalchemy import exists

# 替换为实际的当前用户ID
current_user_id = 123

valid_tods = session.query(Tods).filter(
    # 筛选su_id为空的待处理记录
    Tods.su_id.is_(None),
    # 当前用户未屏蔽fu_id对应的用户:无当前用户作为屏蔽者、fu_id作为被屏蔽者的记录
    ~exists().where(
        (Blocks.blocker == current_user_id) & (Blocks.blocked == Tods.fu_id)
    ),
    # fu_id对应的用户未屏蔽当前用户:无fu_id作为屏蔽者、当前用户作为被屏蔽者的记录
    ~exists().where(
        (Blocks.blocker == Tods.fu_id) & (Blocks.blocked == current_user_id)
    )
).all()

代码说明:

  • Tods.su_id.is_(None):先过滤出还未分配第二个用户的待处理Tods记录;
  • 第一个~exists:校验Blocks表中不存在当前用户屏蔽fu_id用户的记录,确保当前用户没有屏蔽对方;
  • 第二个~exists:校验Blocks表中不存在fu_id用户屏蔽当前用户的记录,确保对方也没有屏蔽当前用户;
  • 三个条件同时满足,即可得到符合业务要求的Tods行。

内容的提问来源于stack exchange,提问作者HadiH2o

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:06:55