如何使用 SQLAlchemy 执行嵌套查询中存在的位置?

Lon*_*Dev 6 python sql sqlalchemy

我正在尝试WHERE EXISTS在 SQLAlchemy 中执行一个子句。SQL 看起来像这样:

SELECT
    id, title
FROM
    package AS package1
WHERE
    EXISTS (
        SELECT
            title
        FROM
            package as package2
        WHERE
            package1.id <> package2.id AND
            package1.title = package2.title
    )
ORDER BY
    title DESC;
Run Code Online (Sandbox Code Playgroud)

是否可以在不使用原始 SQL 的情况下在 SQLAlchemy 中执行此操作?我试过这个,但它似乎没有返回正确的结果:

    t = model.Session.query(
        model.Package.id,
        model.Package.title
    ).subquery('t')

    package = model.Session.query(
        model.Package.title
    ).filter(
        model.Package.id != t.c.id,
        model.Package.title == t.c.title
    )
Run Code Online (Sandbox Code Playgroud)

r-m*_*m-n 6

使用sqlalchemy.orm.aliased()exists()

from sqlalchemy.orm import aliased

package_alias = aliased(Package)

session.query(Package.id, Package.title) \
       .filter(session.query(package_alias.title) \
                      .filter(Package.id != package_alias.id) \
                      .filter(Package.title == package_alias.title) \
                      .exists()) \
       .order_by(Package.title.desc())
Run Code Online (Sandbox Code Playgroud)