この例では、サンプルMySQL classicmodels databaseを使用しています。SQLAlchemyで2つのクエリを結合するには?
は、だから私は2つのクエリを持っている:
products = session.query(Products)
orderdetails = session.query(OrderDetails)
のは、私はこの後にデータベースへのより多くのクエリを作ることができないと私はこの時点から、これらの2つのクエリを結合することができますと仮定しましょう。
私は外をしたいが、このような何かをできるようにするためにそれらに参加:私はこれにアウター・ジョインを行うたび
for orderdetail, product in query:
print product.productName, product.productCode, orderdetails.quantityOrdered
は、しかし、私は唯一の左の参加得るように見えることができます。
for q in query:
# Only gives orderdetails columns
print q
そして、このような何かやって:
for orderdetails, product in query:
print orderdetails, product
は私にエラーを与える:TypeError: 'OrderDetails' object is not iterable
をこのような
query = orderdetails.outerjoin(Products)
コード列のみをORDERDETAILS生み出します。
私は間違っていますか?私は、Productsテーブルの列も欲しいだけです。
EDIT:
私は@のuniverioの答えに私の解決策のおかげで発見しました。私の実際の目標は、既存の2つのクエリを結合してから、SUM
とCOUNT
操作を実行することでした。
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
ええ、私はsession.queryを通してそれを行う方法があります知っています私は持っている2つのセッションのクエリでそれを行う方法はありますか? – joshualan
@joshualan私はあなたがなぜそれをする必要があるのか分かりません。クエリを反復処理するまでSQLは実行されません。または、2つのサブクエリを結合しますか?あるいは、既存のクエリがすでにフィルタされているため、既存のクエリを再利用したいのですか? – univerio
ええ、私はただそれらの既存のクエリを再利用したかったのです。しかし、方法があるように見えません。 – joshualan