Как посчитать количество строк в запросе с помощью SQLAlchemy, если модель не указана? - PullRequest
1 голос
/ 24 января 2020

Я ищу способ подсчитать с помощью SQLAlchemy количество строк, которое возвращается из данного запроса (который потенциально включает в себя фильтры), но все, что я нахожу в net, явно использует модель (пример здесь ). Моя проблема в том, что у меня нет модели, у меня есть только объект Table (потому что я имею дело с временными таблицами, которые время от времени меняются по формату). На данный момент я могу сделать следующее:

tbl = Table(mytablename,metadata,autoload=True, autoload_with=myengine, schema=myschemaname)
query = select([tbl]) 
filters = build_filters(...) #my function that build filters
query = query.where(and_(*filters))
conn = myengine.connect()
ResultProxy = conn.execute(query)
totalCount = len(ResultProxy.fetchall())

, но это очень неэффективно. Есть ли способ сделать подсчет эффективно и без ссылки на какую-либо модель?

1 Ответ

2 голосов
/ 24 января 2020

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

query = select([func.count()]).select_from(my_table).where(and_(*filters))
conn = myengine.connect()
ResultProxy = conn.execute(query)
totalCount = ResultProxy.fetchone()[0] 

Согласно документации, я считаю, что это на самом деле сгенерирует SELECT COUNT из базы данных, а не принесет все строки возвращаются из БД и затем подсчитывают их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...