如何在SQLAlchemy中连接两个查询?

2024-10-05 10:56:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在本例中,我使用示例MySQL classicmodels database。在

所以我有两个问题:

products = session.query(Products)
orderdetails = session.query(OrderDetails)

假设在此之后,我不能再对数据库进行任何查询,从现在起我只能连接这两个查询。

我想对它们做一个外部连接,这样就可以做这样的事情:

^{pr2}$

然而,每当我在这上面执行outerjoin时,我似乎只能得到一个左join。在

query = orderdetails.outerjoin(Products)

这样的代码只生成orderdetails列:

for q in query:
    # Only gives orderdetails columns
    print q

做这样的事情:

for orderdetails, product in query:
    print orderdetails, product

给我一个错误:TypeError: 'OrderDetails' object is not iterable。在

我做错什么了?我只需要Products表中的列。在

编辑:

多亏了@univerio的回答,我找到了我的解决方案。我的真正目标是对两个现有的查询进行连接,然后对它们执行SUM和{}操作。在

SQLAlchemy基本上只是将查询对象转换为SQL语句。with_entities函数只是将SELECT表达式更改为传递给它的任何表达式。这是我更新的解决方案,包括解包和读取连接:

for productCode, numOrders, quantityOrdered in orderdetails.with_entities(
        OrderDetails.productCode, 
        func.count(OrderDetails.productCode),
        func.sum(OrderDetails.quantityOrdered)).group_by(OrderDetails.productCode):
    print productCode, numOrders, quantityOrdered

Tags: inforsessionwithproduct解决方案query事情

热门问题