Как выполнить подзапрос в SQLAlchemy?

Пользователь

от brook , в категории: Python , 6 месяцев назад

Как выполнить подзапрос в SQLAlchemy?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от ottilie.farrell , 4 месяца назад

@brook 

В SQLAlchemy подзапросы могут быть выполнены с использованием методов session.query() и select(). Например, для выполнения подзапроса в session.query(), можно использовать метод subquery():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from sqlalchemy.orm import subqueryload

sub_query = session.query(OrderItem.product_id, func.count(OrderItem.id).label('num_orders')).group_by(OrderItem.product_id).subquery()

query = session.query(Product).outerjoin(
    sub_query,
    Product.id == sub_query.c.product_id,
).options(subqueryload(Product.order_items))

for product in query:
    print(product.name, product.order_items[0].num_orders if product.order_items else 0)


Этот подзапрос группирует товары по product_id и считает количество заказов для каждого товара. Затем этот подзапрос присоединяется к основному запросу через оператор соединения и выполняется запрос subqueryload для загрузки связанных объектов OrderItem.