Sqlalchemy-core-using-joins

提供:Dev Guides
移動先:案内検索

SQLAlchemyコア-結合の使用

この章では、SQLAlchemyで結合を使用する方法を学習します。

結合の効果は、select()コンストラクトの* columns句*または* where句*のいずれかに2つのテーブルを配置するだけで実現されます。 ここで、join()およびouterjoin()メソッドを使用します。

join()メソッドは、あるテーブルオブジェクトから別のテーブルオブジェクトへの結合オブジェクトを返します。

join(right, onclause = None, isouter = False, full = False)

上記のコードに記載されているパラメータの機能は次のとおりです-

  • right -結合の右側。これは任意のTableオブジェクトです
  • onclause -結合のON句を表すSQL式。 Noneのままにすると、外部キー関係に基づいて2つのテーブルを結合しようとします
  • isouter -Trueの場合、JOINではなくLEFT OUTER JOINをレンダリングします
  • full -Trueの場合、LEFT OUTER JOINではなくFULL OUTER JOINをレンダリングします

たとえば、join()メソッドを次に使用すると、外部キーに基づいて自動的に結合されます。

>>> print(students.join(addresses))

これは、次のSQL式と同等です-

students JOIN addresses ON students.id = addresses.st_id

次のように参加基準を明示的に言及できます-

j = students.join(addresses, students.c.id == addresses.c.st_id)

次のようにこの結合を使用して以下の選択構造を構築する場合-

stmt = select([students]).select_from(j)

これは、次のSQL式になります-

SELECT students.id, students.name, students.lastname
FROM students JOIN addresses ON students.id = addresses.st_id

エンジンを表す接続を使用してこのステートメントを実行すると、選択した列に属するデータが表示されます。 完全なコードは次のとおりです-

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey
engine = create_engine('sqlite:///college.db', echo = True)

meta = MetaData()
conn = engine.connect()
students = Table(
   'students', meta,
   Column('id', Integer, primary_key = True),
   Column('name', String),
   Column('lastname', String),
)

addresses = Table(
   'addresses', meta,
   Column('id', Integer, primary_key = True),
   Column('st_id', Integer,ForeignKey('students.id')),
   Column('postal_add', String),
   Column('email_add', String)
)

from sqlalchemy import join
from sqlalchemy.sql import select
j = students.join(addresses, students.c.id == addresses.c.st_id)
stmt = select([students]).select_from(j)
result = conn.execute(stmt)
result.fetchall()

以下は、上記のコードの出力です-

[
   (1, 'Ravi', 'Kapoor'),
   (1, 'Ravi', 'Kapoor'),
   (3, 'Komal', 'Bhandari'),
   (5, 'Priya', 'Rajhans'),
   (2, 'Rajiv', 'Khanna')
]