SQLAlchemy отличается игнорированием order_by - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь выполнить запрос из моего flask приложения, используя SQLAlchemy, где я упорядочиваю результаты по отметке времени в порядке убывания. Из возвращенного заказа я хочу получить отличные идентификаторы sender_id. К сожалению, отдельный игнорирует мой запрошенный order_by и извлекает данные из стандартного макета таблицы.

messagesReceived = Message.query.filter_by(recipient_id=user_id).order_by(Message.timestamp.desc()).group_by(Message.sender_id).distinct()

Я все еще новичок в SQLAlchemy, и через обучающие программы и уроки, которые я сделал, я не сталкивался с этим, я пытался поискать в Google, но я не думаю, что формулирую это правильно, чтобы получить ответ , В настоящее время я пытаюсь сосредоточиться на подзапросах, так как думаю, что это может быть способ заставить его работать, но пока спрашиваю здесь.

1 Ответ

1 голос
/ 28 марта 2020

Ваш SQL запрос нелогичен. Вы выбираете все сообщение, но группируете по person_id. Если он не уникален, он не определяет, из какой строки выбраны значения для строки группы. ORDER BY логически выполняется после GROUP BY, и, поскольку timestamp теперь не определено, то же относится и к результирующему порядку. Некоторые СУБД SQL даже не разрешают запускать такой запрос, поскольку это не разрешено стандартом SQL.

Для выборки отдельных sender_id с, упорядоченных по их последним timestamp на * 1007. * до

messagesReceived = db.session.query(Message.sender_id).\
    filter_by(recipient_id=user_id).\
    group_by(Message.sender_id).\
    order_by(db.func.max(Message.timestamp))
...