Sqlalchemy 如何在查询中找到用户的位置?

Sqlalchemy 如何在查询中找到用户的位置?,sqlalchemy,Sqlalchemy,如何在查询中找到用户的位置? 我有(我正在使用MySQL) 而我有用户id,如何找到那个特定id的位置是有序数组? (我可以返回all并进行迭代,但在数据库级别有没有更好的方法来解决这个问题,需要快速运行)数据库应该支持这样做。原始SQL查询将如下所示: SELECT pos FROM (SELECT id, row_number() OVER (ORDER BY age DESC) AS pos FROM user) AS sub WHERE sub.id = :id; 在炼

如何在查询中找到用户的位置? 我有(我正在使用MySQL)

而我有用户id,如何找到那个特定id的位置是有序数组? (我可以返回all并进行迭代,但在数据库级别有没有更好的方法来解决这个问题,需要快速运行)

数据库应该支持这样做。原始SQL查询将如下所示:

SELECT pos FROM
    (SELECT id, row_number() OVER (ORDER BY age DESC) AS pos FROM user) AS sub
    WHERE sub.id = :id;
在炼金术中:

from sqlalchemy import func, desc

user_id = 42
sub = (session
    .query(
        UserModel.id,
        func.row_number().over(order_by=desc(UserModel.age)).label('pos'))
    .subquery())
pos = session.query(sub.c.pos).filter(sub.c.id==user_id).scalar()
请注意,返回的索引是基于1的


在流行的RDBMS中,这将适用于PostgreSQL、Oracle、MSSQL,但不适用于MySQL或SQLite。

MySQL或SQLite数据库如何?有什么解决办法吗?
from sqlalchemy import func, desc

user_id = 42
sub = (session
    .query(
        UserModel.id,
        func.row_number().over(order_by=desc(UserModel.age)).label('pos'))
    .subquery())
pos = session.query(sub.c.pos).filter(sub.c.id==user_id).scalar()