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

如何用Flask-SQLAlchemy实现左外连接查询用户无记录的谜题

左外连接实现查询指定用户无关联Result的Riddle数据

核心逻辑

以Riddle表为左表,和Result表做左外连接,关联时同时限定Result对应的用户ID为指定用户,最终筛选出连接后Result侧字段为空的Riddle记录,即为该用户没有对应Result关联的所有谜语数据。

代码实现

# 替换为你实际要查询的目标用户ID
target_user_id = 1

unrelated_riddles = db.session.query(Riddle).outerjoin(
    Result,
    # 双条件关联:谜语ID匹配 + 结果记录属于目标用户
    (Riddle.id == Result.riddle_id) & (Result.user_id == target_user_id)
).filter(
    # 左连接后Result侧为空,说明该用户没有对应关联记录
    Result.id.is_(None)
).all()

注意:SQLAlchemy 中判断 NULL 推荐使用is_(None)写法,兼容性更高,也可以写为Result.id == None。

扩展场景:查询用户未完成的谜语

如果需求调整为获取用户「未完成」的谜语,包括无关联Result、有关联Result但is_completed为False的情况,调整筛选条件即可:

uncompleted_riddles = db.session.query(Riddle).outerjoin(
    Result,
    (Riddle.id == Result.riddle_id) & (Result.user_id == target_user_id)
).filter(
    db.or_(
        Result.id.is_(None),
        Result.is_completed == False
    )
).all()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:03