Sqlalchemy-orm-working-with-joins
提供:Dev Guides
SQLAlchemy ORM-結合の使用
2つのテーブルができたので、両方のテーブルに同時にクエリを作成する方法を確認します。 CustomerとInvoiceの間の単純な暗黙的な結合を構築するために、Query.filter()を使用して、関連する列を一緒に同等化できます。 以下では、このメソッドを使用して、CustomerおよびInvoiceエンティティを一度に読み込みます-
SQLAlchemyによって発行されたSQL式は次のとおりです-
そして、上記のコード行の結果は次のとおりです-
実際のSQL JOIN構文は、次のようにQuery.join()メソッドを使用して簡単に達成されます-
結合のためのSQL式がコンソールに表示されます-
forループを使用して結果を反復処理できます-
バインドパラメータとして8500を使用すると、次の出力が表示されます-
Query.join()は、これらのテーブル間に外部キーが1つしかないため、これらのテーブルを結合する方法を知っています。 外部キーが存在しない場合、またはより多くの外部キーが存在しない場合、Query.join()は、次の形式のいずれかが使用された場合により良く機能します-
query.join(Invoice, id == Address.custid) | explicit condition |
query.join(Customer.invoices) | specify relationship from left to right |
query.join(Invoice, Customer.invoices) | same, with explicit target |
query.join('invoices') | same, using a string |
同様に、outerjoin()関数を使用して、左外部結合を実現できます。
subquery()メソッドは、エイリアス内に埋め込まれたSELECTステートメントを表すSQL式を生成します。
stmtオブジェクトには、次のようなSQL文が含まれます-
ステートメントを作成すると、Tableコンストラクトのように動作します。 ステートメントの列は、以下のコードに示すようにcと呼ばれる属性を介してアクセス可能です-
上記のforループは、次のように請求書の名前ごとのカウントを表示します-