在本例中,我使用示例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
可以用^{} 覆盖实体列表:
相关问题 更多 >
编程相关推荐