Python 我的行显示在哪一页?

Python 我的行显示在哪一页?,python,sql,postgresql,pagination,sqlalchemy,Python,Sql,Postgresql,Pagination,Sqlalchemy,我有一张帖子表。我显示按时间降序排列的贴子列表,每页限制为20行。如何通过id确定特定行所在的页面,以便链接到该特定页面 桌柱 当前 select * from post order by created_date desc limit 20 offset 0 id X在哪一页?我的理论是,当您通过特定的“order by”进行选择时,我可以返回id所在的行号,但我不确定这是否正确,也不确定如何执行此操作。我建议在子查询中: SELECT rn / 20 + 1 AS page -- 20

我有一张帖子表。我显示按时间降序排列的贴子列表,每页限制为20行。如何通过id确定特定行所在的页面,以便链接到该特定页面

桌柱

当前

select * from post order by created_date desc limit 20 offset 0
id X在哪一页?我的理论是,当您通过特定的“order by”进行选择时,我可以返回id所在的行号,但我不确定这是否正确,也不确定如何执行此操作。

我建议在子查询中:

SELECT rn / 20 + 1 AS page  -- 20 rows per page
FROM  (
   SELECT id, row_number() OVER (ORDER BY created_date DESC) AS rn
   FROM   post
   ) sub
WHERE id = 123;

通常的免责声明:如果基础数据同时更改,页码可能会更改。

如果您想要一个链接,并且如果创建日期始终是插入当前时间戳,则可以计算序列id

为了更方便地始终将当前的时间戳作为创建的时间戳,请将其设置为默认值

created_date timestamp default current_timestamp
可以将其设置为约束

created_date timestamp default current_timestamp check(created_date = current_timestamp)
如果需要链接列表,请将ID作为Python列表传递给查询

select *
from (
    select id, count(*) over(order by id desc) / 20 + 1 as page
    from post
    where
        id >= (
            select id
            from unnest(%(ids_list)s) s
            order by id
            limit 1
        )
) s
where id = any (%(ids_list))s
在最后一个查询中,count是一个运行总数

created_date timestamp default current_timestamp check(created_date = current_timestamp)
select *
from (
    select id, count(*) over(order by id desc) / 20 + 1 as page
    from post
    where
        id >= (
            select id
            from unnest(%(ids_list)s) s
            order by id
            limit 1
        )
) s
where id = any (%(ids_list))s