#python #mysql #sqlalchemy
#python #mysql #sqlalchemy
Вопрос:
Я использую sqlalchemy
запрос с limit
, и offset.
теперь мне нужно получить результат total count
запроса.
На данный момент я использую запрос count и запрос limit отдельно и получаю результаты. Есть ли какой-либо эффективный способ получить количество в одном запросе sqlalchemy.
Вот пример того, что я использую в настоящее время,
# getting total count
docs_count = DB_SESSION.query(Documents).count()
# using limit and offset
docs_list = DB_SESSION.query(Documents).limit(10).offset(0)
Теперь можно объединить это в один запрос или есть какой-либо эффективный способ сделать это. Спасибо всем.
Ответ №1:
Я столкнулся с той же проблемой. Что я сделал, так это добавил операцию подсчета в запрос через предложение ‘over’ следующим образом:
from sqlalchemy.sql import func
docs_query = DB_SESSION.query(Documents,func.count(Documents.id).over().label("total"))
docs_query = docs_query.limit(10).offset(0)
docs_results = docs_query.all()
if len(docs_results) > 0 :
docs_list= docs_results[0]
docs_count= docs_results[0][1]
Информация о SQLAlchemy :
- количество: https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.count
- over: https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.over
Я не знаю, лучший ли это способ сделать это, но это немного быстрее, чем то, что вы сделали. Надеюсь, это поможет вам или кому-то еще.