在sqlalchemy ORM查询中使用NOT EXISTS子句

2024-04-26 20:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我要将以下原始sql查询转换为sqlalchemy ORM查询:

SELECT * FROM kwviolations AS kwviol WHERE kwviol.proj_id=1 AND NOT EXISTS (SELECT * FROM
kwmethodmetrics AS kwmetrics WHERE kwmetrics.kw_id=kwviol.kw_id AND kwmetrics.checkpoint_id=5);

我尝试了以下ORM查询,但未成功:

self.session.query(KWViolations).filter(KWViolations.proj_id==project.id).\
filter(and_(~KWViolations.kw_id.any(KWMethodMetrics.kw_id==KWViolations.kw_id),KWMethodMetrics.checkpoint_id==checkpoint.id))

有人能帮忙吗? 提前谢谢


Tags: andfromidasormfilterwhereselect
1条回答
网友
1楼 · 发布于 2024-04-26 20:59:33

这里的kw_id似乎是一个标量列值,因此不能调用any(),因为any()只能从relationship()绑定属性中使用。因为我在这里看不到其中一个,所以您可以直接调用exists()

from sqlalchemy import exists

session.query(KWViolations).filter(KWViolations.proj_id == project.id).\
    filter(
        ~exists().where(
                and_(
                    KWMethodMetrics.kw_id == KWViolations.kw_id,
                    KWMethodMetrics.checkpoint_id == checkpoint.id
                )
        )
    )

相关问题 更多 >