Sqlalchemy 如何在查询中找到用户的位置?
如何在查询中找到用户的位置? 我有(我正在使用MySQL) 而我有用户id,如何找到那个特定id的位置是有序数组? (我可以返回all并进行迭代,但在数据库级别有没有更好的方法来解决这个问题,需要快速运行)数据库应该支持这样做。原始SQL查询将如下所示: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; 在炼
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()