SQLite分页

嗨,朋友们,我正在开发一个类似于现在服务的应用程序。我有来自用户的请求,必须进行处理。我为此使用python-flask和sqlite。

我是不熟悉烧瓶的人,这是我的第一个项目。如果我错了,请纠正我。

result = cur.execute("SELECT * from orders")
orders = result.fetchmany(5)

我正在尝试使用orders = result.paginate(...)

但是似乎有一些问题。 另外,我不确定如何在不同页面中显示数据库数据。

我想要第一页上的前10条记录,第二页上的前10条,依此类推。

能请你帮我吗?

lrslrslrs 回答:SQLite分页

我从未使用过flask,但是假设您可以发出分页/页面抛出,那么引入0-9值的查询将允许有条件的页面抛出。

例如,假设一个具有3列的 orders orderdate ordertype orderdesc 所需的顺序是根据那些列的顺序(请参见注释),然后下面的操作将导致列的范围是0到9,从而允许检查是否有丢步现象:-

SELECT *,(
        SELECT count() 
        FROM ORDERS 
        WHERE orderdate||ordertype||orderdesc < o.orderdate||o.ordertype||o.orderdesc 
        ORDER BY orderdate||ordertype||orderdesc
    ) % 10 AS orderby

FROM ORDERS AS o ORDER BY orderdate||ordertype||orderdesc
  • 请注意,以上内容依赖于排序顺序,而where子句的结果相同,因此可能需要更复杂的WHERE子句。以上内容仅供参考。

用法示例

考虑以下使用中的上述示例。这将生成100行订单,并在指定范围内随机生成订单日期和订单类型,然后根据上述查询提取数据。底涂数据和提取的数据的结果显示在结果部分。

/* Create Test Environment */
DROP TABLE IF EXISTS orders;
/* Generate and load some random orders */
CREATE TABLE If NOT EXISTS orders (orderdate TEXT,ordertype TEXT,orderdesc TEXT);
WITH RECURSIVE cte1(od,ot,counter) AS 
    (
        SELECT 
            datetime('now','+'||(abs(random()) % 10)||' days'),(abs(random()) % 26),1
        UNION ALL SELECT 
            datetime('now',counter+1  
        FROM cte1 LIMIT 100
    )
INSERT INTO orders SELECT * FROM cte1;

/* Display the resultant data */
SELECT rowid,* FROM orders;

/* Display data with generated page throw indicator */
SELECT rowid,*,(
        SELECT count() 
        FROM ORDERS 
        WHERE orderdate||ordertype||orderdesc < o.orderdate||o.ordertype||o.orderdesc 
        ORDER BY orderdate||ordertype||orderdesc
    ) % 10 AS orderby
FROM ORDERS AS o ORDER BY orderdate||ordertype||orderdesc;
/* Clean up */
DROP TABLE IF EXISTS orders;

结果(部分)

核心数据(未按rowid排序(为了比较目的包括了rowid)):-

enter image description here

提取的带有页面抛出指示器的数据(突出显示)

enter image description here

  • 很显然,您可能不会在第一行扔一页。
  • 由于为了方便起见使用了3列的合并,因此结果可能会有些混乱,例如2似乎大于11,依此类推。
  • rowid指示原始位置,因此表明数据已排序。
本文链接:https://www.f2er.com/3136126.html

大家都在问