Получить общее количество записей для результата запроса SQLAlchemy, в котором используется разбивка на страницы (ограничение, смещение)

#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 :

Я не знаю, лучший ли это способ сделать это, но это немного быстрее, чем то, что вы сделали. Надеюсь, это поможет вам или кому-то еще.