Пагинация для SQLite - PullRequest
       1

Пагинация для SQLite

0 голосов
/ 08 ноября 2019

Привет, друзья! Я работаю над приложением, которое мне сейчас нравится. У меня есть запросы от пользователей, и я должен работать над этим. Для этого я использую python-flask и sqlite.

Я новичок в flask, и это мой первый проект. Пожалуйста, поправьте меня, если я ошибаюсь.

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

Я пытаюсь использовать orders = result.paginate(...)

Но, похоже, есть какая-то проблема. Кроме того, я не уверен, как отображать данные БД на разных страницах.

Мне нужны первые 10 записей на первой странице, следующие 10 на второй странице и т. Д.

Не могли бы вы, пожалуйстапомогите мне?

1 Ответ

0 голосов
/ 09 ноября 2019

Я никогда не использовал флешку, но предполагая, что вы можете выполнить paginate / page throw, тогда запрос, который вводит значение 0-9, разрешил бы условный выброс страницы.

Например, предполагая orders таблицы, которые имеют 3 столбца, 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 строк заказов со случайно сгенерированными датами и типами заказов в определенных диапазонах, а затем извлекает данные в соответствии с вышеуказанным запросом. Результаты данных underyling и извлеченных данных показаны в разделе результатов.

/* 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','+'||(abs(random()) % 10)||' days'),
            (abs(random()) % 26),
            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

  • Очевидно, что вы, скорее всего, не выбросите страницу для первой строки.
  • Поскольку для удобства используется объединение трех столбцов, результаты могут быть немного запутанными, посколькунапример, 2 будет больше 11 и т. д.
  • rowid указывает исходную позицию, поэтому показывает, что данные были отсортированы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...