首页 > 解决方案 > 将连接表限制为 4 行并使用 postgresql 和 sqlalchemy 以 json 格式返回结果

问题描述

到目前为止,我还没有能够通过error aggregate function calls cannot contain window function calls并且我还没有找到一种方法来限制不会触发该错误的连接表。

我已经尝试func.count(Video.id).label('rn')代替func.row_number().over(partition_by=role.c.movie_id).label('rn')它给我错误:aggregate function calls cannot be nested并将 Actor 表移动到它自己的子查询中,这给了我错误AttributeError: 'Alias' object has no attribute 'type'

sub_query = db.session.query(
    func.json_build_object(
        'movie_name', Movie.movie_name,
        'movie_year', Movie.year,
        'movie_description', Movie.description,
        'Actors', func.array_agg(
            func.json_build_object(
                'actors_name', Actor.name,
                'actors_age', Actor.age,
                'rn', func.row_number().over(partition_by=role.c.movie_id).label('rn')
            )
        )
    )
).group_by(Movie.movie_name, Movie.year, Movie.description, role.c.movie_id)\
.join(role, (role.c.movie_id == Movie.id)).join(Actor, (role.c.actor_id == Actor.id)).subquery()
query = db.session.query(sub_query).filter(text('rn <= 4'))

标签: pythonsqlpostgresqlsqlalchemy

解决方案


推荐阅读