Обратно упорядоченный запрос SQLAlchemy

Какой лучший способ отменить упорядоченный запрос? Могу ли я сделать это только с sql / sqlalchemy?
Например, если У меня есть строки с идентификаторами: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Я хочу получить строки после id 5 с помощью предел 3 в таком порядке [8, 7, 6]

На данный момент работает с:

Comment.query.filter(Comment.id > 5).order_by(Post.id.asc()).limit(3)

Я получил список с идентификаторами [6, 7, 8] и после того, как я использую list.reverse () в Python, чтобы получить список с порядком [8,7,6]

Это не работает:
Comment.query.filter(Comment.id > 5).order_by(Post.id.desc()).limit(3)
он выдаст список с идентификаторами [10,9,8]

Это нормально, что ваш второй скрипт не работает: он запрашивает три самых больших идентификатора, превосходящих 5. Если бы у вас были такие идентификаторы, как: 1002, 1001, 1000, которые были самыми большими доступными, это был бы тот, который вы получили. Если вы уверены, что идентификаторы 6,7 и 8 существуют, вы можете: Comment.query.filter (Comment.id <= 8) .order_by (Post.id.desc ()). Limit (3)

Matina G 09.08.2018 10:52

@MatinaG Спасибо за ответ, да, я пробовал это раньше, с помощью Comment.query.filter (Comment.id <= after_id + limit) .order_by (Post.id.desc ()). Limit (3), но в комментариях к таблице не только для одного сообщения, но и для одного сообщения у нас есть идентификаторы типа [1, 2, 3, 5, 10, 11, 15]

Edvard Krol 09.08.2018 11:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
1 291
1

Ответы 1

Вы можете использовать CTE.

http://docs.sqlalchemy.org/en/latest/core/selectable.html#sqlalchemy.sql.expression.HasCTE.cte

применить ограничение:

cte = session.query(Comment).filter(Comment.id > 5).limit(3).cte()

затем обратный

result = session.query(cte).order_by(cte.c.id.desc()).all()

пожалуйста, посмотрите на этот вопрос stackoverflow.com/q/51758821/6633337

Ratan Uday Kumar 09.08.2018 13:24

cte = db.session.query (Комментарий) .filter (Comment.id> 5) .limit (3) .cte (); res = db.session.query (cte) .order_by (cte.c.id.desc ()). all (). Этот код генерирует ошибку TypeError: логическое значение этого предложения не определено

Edvard Krol 09.08.2018 15:34

Другие вопросы по теме