#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
запрос с этим подзапросом, чтобы получить соответствующие варианты использования.