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

如何用SQLAlchemy查询未被当前用户审核的图片文件名?

解决方案:查询未被当前用户审核的图片文件名

咱们先拆解下你的需求:要找所有picture_type是photograph,而且**当前用户还没审核(也就是没留过评论)**的图片文件名。你的原语句之所以只返回已审核的,是因为几个细节没处理对:

  1. 原语句的filter(Picture.filename == Comment.filename)把outerjoin硬生生变成了innerjoin——只有两边都匹配的记录才会被保留,自然只能拿到有评论的图片;
  2. 没有限定“当前用户”的条件,所以就算能拿到数据,也是所有用户评论过的图片,不是针对特定用户的。

下面给你两种可行的修改方案,选哪种都可以:

方案一:用Outer Join + 空值过滤

这种方式通过左连接关联当前用户的评论记录,然后筛选出没有关联到评论的图片:

# 假设当前用户的ID存在current_user_id变量里
session.query(Picture.filename)\
    .filter(Picture.picture_type == 'photograph')\
    .outerjoin(
        Comment, 
        # 关联条件:文件名匹配 + 评论属于当前用户
        and_(Picture.filename == Comment.filename, Comment.user_id == current_user_id)
    )\
    # 筛选出当前用户没有评论过的(评论记录为空)
    .filter(Comment.user_id == None)\
    .all()

方案二:用NOT EXISTS子查询

这种写法逻辑更直观,直接检查“当前用户是否没有对该图片留过评论”:

from sqlalchemy import exists, and_

# 子查询:检查当前用户是否对某张图片有评论
comment_exists_subquery = exists().where(
    and_(
        Comment.filename == Picture.filename,
        Comment.user_id == current_user_id
    )
)

session.query(Picture.filename)\
    .filter(Picture.picture_type == 'photograph')\
    # 取反:只保留当前用户没评论过的图片
    .filter(~comment_exists_subquery)\
    .all()

两种方案都能实现你的需求,你可以根据自己的代码习惯选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:34:53