фильтр sqlalchemy по столбцу count

#python #sqlalchemy

#python #sqlalchemy

Вопрос:

У меня есть пользовательский запрос, который фильтрует по количеству заказов, которые есть у каждого пользователя (ordersCount).

 User.query.filter('ordersCount>2')
  

Если я его запускаю, он выдает: «Неизвестный столбец ‘ordersCount’ в предложении ‘where'»

Исходя из моего опыта, я должен использовать having для таких операций, потому что mysql не разрешает это для полей, не являющихся частью таблицы, но если я запускаю его с помощью having вместо filter, я получаю:

 (1054, "Unknown column 'ordersCount' in 'having clause'") 'SELECT count(1) AS count_1 nFROM user nHAVING ordersCount > 2' ()
  

Итак, как мне отфильтровать столбец count в sqlalchemy?

Ответ №1:

Смотрите документацию по упорядочиванию, группировке, ограничению, смещению …. Основываясь на предоставленном примере кода и предположении, что ваши заказы хранятся в orders таблице, ваша версия будет выглядеть примерно так:

 >>> s = select([orders.c.user_id, func.count(orders.c.id)]).
...     group_by(orders.c.user_id).having(func.count(orders.c.id) > 2)
  

Таким образом, вы получите user_id ‘ы пользователей, о которых идет речь. Если вы хотите извлечь User объекты, просто создайте подзапрос s about a и соедините свой User запрос с этим подзапросом, чтобы получить соответствующие варианты использования.