19

次の生の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))

誰でも助けてもらえますか?前もって感謝します

4

1 に答える 1

27

kw_idhere はスカラー列の値のように見えるため、それを呼び出すことはできませんany()- relationship()バインドされany()た属性からのみ利用できます。ここにはそれらのいずれも表示されないため、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
                )
        )
    )
于 2013-01-31T00:21:48.233 に答える