2014-10-23 6 views
2

В моем коде Python (Flask) мне нужно получить первый и последний, отсортированные по заданной переменной из запроса SQLAlchemy.Получить первый и последний элемент с SQLAlchemy

я первый написал следующий код:

first_valuation = Valuation.query.filter_by(..).order_by(sqlalchemy.desc(Valuation.date)).first() 
# Do some things 
last_valuation = Valuation.query.filter_by(..).order_by(sqlalchemy.asc(Valuation.date)).first() 
# Do other things 

Поскольку эти запросы могут быть тяжелы для базы данных PostgreSQL, и как я дублируя свой код, я думаю, что это будет лучше использовать только один запрос, но Я не знаю SQLAlchemy достаточно, чтобы это сделать ... (Например, когда запросы инициируются, например?)

Какое это наилучшее решение?

ответ

3

1) How to get First and Last record from a sql query? Речь идет о том, как получить первую и последнюю записи в одном запросе.

2) Here являются документами по запросу sqlalchemy. В частности обратите внимание на union_all (для реализации ответов сверху). Он также имеет информацию о том, когда запускаются запросы (в основном, запросы запускаются при использовании методов, которые возвращают результаты, например first() или all(). Это означает, что Valuation.query.filter_by(..).order_by(sqlalchemy.desc(Valuation.date)) не будет выдавать запрос в базу данных).

Кроме того, если память не проблема, я бы сказал, что получить all() объекты из первого запроса и просто получить первый и последний результат с помощью питона:

results = Valuation.query.filter_by(..).order_by(sqlalchemy.desc(Valuation.date)).all() 
first_valuation = results[0] 
last_valuation = results[-1] 

Это будет быстрее, чем выполнение двух (даже унифицированных) запросов, но потенциально будет потреблять много памяти, если ваша база данных достаточно велика.

+0

В настоящее время один запрос означает около ~ 15000 результатов, но я буду использовать второй, пока не получу проблемы с производительностью! –

Смежные вопросы