SqlAlchemy sql.text лифт ограничение предела - PullRequest
0 голосов
/ 25 августа 2018

У меня есть python3 + flask + sqlalchemy + postgres

У меня есть несколько пользовательских запросов, чьи данные я обслуживаю, разбит на страницы как json.

from sqlalchemy.sql import text
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
db.engine.execute('SELECT * FROM MY_TABLE LIMIT :limit OFFSET :offset',
                   limit=limit, offset=offset)

Я могу передать целочисленные значения для limit и values, пока все хорошо.

Однако иногда мне нужны полные данные вместо разбитых на страницы данных.

Эквивалентный запрос для этого будет

SELECT * FROM MY_TABLE LIMIT ALL OFFSET 0

Итак, я попытался передать limit='ALL' и offset=0

, и SQLAlchemy жалуется

sqlalchemy.exc.DataError: (psycopg2.DataError) invalid input syntax for integer: "ALL"
LINE 1: ...T_LABEL_ID IN (2, 5) ORDER BY TIMESTAMP_RAW LIMIT 'ALL' OFFS...

ALL является зарезервированным ключевым словом и не ожидается, что оно будет передано в виде строки

Мой вопрос: есть ли лучший способ сделать это, кроме условного добавления LIMIT :limit OFFSET :offset к моему запросу только при необходимости?

1 Ответ

0 голосов
/ 25 августа 2018

Лучший способ сделать что-то подобное - назначить произвольно огромное число.Примерно так:

from sqlalchemy.sql import text
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
db.engine.execute('SELECT * FROM MY_TABLE LIMIT :limit OFFSET :offset',
                   limit=99999999999999, offset=offset)

Существует другой способ, если ваша база данных postgres , которую вы уже пробовали.т.е. добавление LIMIT ALL.Поскольку вы получаете сообщение об ошибке, я полагаю, что вы используете Mysql или другую базу данных.

Обновление:

Как упоминалось Sundeep, ошибка связана с заменой строки.Таким образом, альтернативный путь будет.

db.engine.execute('SELECT * FROM MY_TABLE LIMIT {limit} OFFSET {offset}'.format(limit='ALL', offset=offset))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...