使用 row_number() 删除 SQLAlchemy 查询

问题描述 投票:0回答:0

我正在寻找一种合适的方法来使用 row_number() 函数来制作 query.delete()

下面是我目前的解决方案:

subquery = session.query(Foo,
                         func.row_number().over(order_by=desc(Foo.bar)).label("row_number")).subquery()
subquery = session.query(subquery).filter(subquery.c.row_number > 3)
subquery = subquery.from_self(Foo.id)

query = session.query(Foo).filter(
    Foo.id.in_(subquery)
)

我不喜欢我需要明确检查 Foo.id 是否在 ID 列表中。我需要比较所有对象的列而不对它们进行硬编码。像这样的东西:

subquery = session.query(Foo,
                         func.row_number().over(order_by=desc(Foo.bar)).label("row_number")).subquery()
subquery = session.query(subquery).filter((subquery.c.row_number > 3))
subquery = subquery.from_self(Foo)

query = session.query(Foo).filter(
    Foo.in_(subquery)
)

但这当然行不通。

如果有人提出解决方案,我将不胜感激。

python postgresql sqlalchemy row-number
© www.soinside.com 2019 - 2024. All rights reserved.