小编use*_*182的帖子

将查询转换为column_property?

昨天我询问了一个复杂的(对我而言)MySQL 查询,我需要将其用作column_property. 一位善良的用户(他不使用 SQLAlchemy,所以我懒得链接他)回答了其中的 SQL 部分:

select *
from (
    select t.*,
        case when count(*) over(partition by firstname, lastname) > 1
            then row_number() over(partition by firstname, lastname order by startdate) 
        end as identifier
    from person t
) t
where id = ?
Run Code Online (Sandbox Code Playgroud)

经过长时间的努力,我能够将其转换为 SQLA 中的函数:

def get_identifier(id):

    mycase = db.case([
        (
            db.func.count().over(partition_by=[Person.firstname, Person.lastname]) > 1,
            db.func.row_number().over(partition_by=[Person.firstname, Person.lastname], order_by=Person.startdate)
        )
    ]).label('identifier')

    subq = db.session.query(Person.id, mycase).subquery('subq')

    identifier = db.session.query(subq.c.identifier).\
        filter(subq.c.id == id).scalar()
    return identifier
Run Code Online (Sandbox Code Playgroud)

然而,我一直困惑于如何使这项工作成为一个column_property,而且我能找到的例子并不多。即使是简单的部分——如果我在Person课堂上,那么我就无法访问 …

python sqlalchemy

5
推荐指数
0
解决办法
112
查看次数

标签 统计

python ×1

sqlalchemy ×1