Python SQLAlchemy使用标记的OVER子句和ORM进行查询

use*_*560 8 python sqlalchemy

另一个问题是如何在sqlalchemy上使用OVER子句:

在SQLAlchemy中使用OVER窗口函数

但是如何使用ORM呢?我有类似的东西:

q = self.session.query(self.entity, func.count().over().label('count_over'))
Run Code Online (Sandbox Code Playgroud)

q.all()使用以下消息调用时失败:

sqlalchemy.exc.InvalidRequestError:
Ambiguous column name 'count(*) OVER ()' in result set! try 'use_labels' option on select statement
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Wol*_*lph 6

你的over语法几乎正确,它应该是这样的:

import sqlalchemy
q = self.session.query(
    self.entity,
    sqlalchemy.over(func.count()).label('count_over'),
)
Run Code Online (Sandbox Code Playgroud)

文档中的示例:

from sqlalchemy import over
over(func.row_number(), order_by='x')
Run Code Online (Sandbox Code Playgroud)