Какой лучший способ отменить упорядоченный запрос? Могу ли я сделать это только с 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]
@MatinaG Спасибо за ответ, да, я пробовал это раньше, с помощью Comment.query.filter (Comment.id <= after_id + limit) .order_by (Post.id.desc ()). Limit (3), но в комментариях к таблице не только для одного сообщения, но и для одного сообщения у нас есть идентификаторы типа [1, 2, 3, 5, 10, 11, 15]
Вы можете использовать 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
cte = db.session.query (Комментарий) .filter (Comment.id> 5) .limit (3) .cte (); res = db.session.query (cte) .order_by (cte.c.id.desc ()). all (). Этот код генерирует ошибку TypeError: логическое значение этого предложения не определено
Это нормально, что ваш второй скрипт не работает: он запрашивает три самых больших идентификатора, превосходящих 5. Если бы у вас были такие идентификаторы, как: 1002, 1001, 1000, которые были самыми большими доступными, это был бы тот, который вы получили. Если вы уверены, что идентификаторы 6,7 и 8 существуют, вы можете: Comment.query.filter (Comment.id <= 8) .order_by (Post.id.desc ()). Limit (3)