SQLAlchemyCore-結合の使用
この章では、SQLAlchemyで結合を使用する方法を学習します。
結合の効果は、2つのテーブルをどちらかに配置するだけで実現されます。 columns clause または where clauseselect()コンストラクトの。ここで、join()メソッドとouterjoin()メソッドを使用します。
join()メソッドは、あるテーブルオブジェクトから別のテーブルオブジェクトに結合オブジェクトを返します。
join(right, onclause = None, isouter = False, full = False)
上記のコードに記載されているパラメータの機能は次のとおりです。
right−結合の右側。これは任意のテーブルオブジェクトです
onclause−結合のON句を表すSQL式。Noneのままにすると、外部キー関係に基づいて2つのテーブルを結合しようとします
isouter − Trueの場合、JOINではなくLEFT OUTERJOINをレンダリングします
full − Trueの場合、LEFT OUTERJOINではなくFULLOUTERJOINをレンダリングします
たとえば、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)
ここで、この結合を-として使用して、以下のselectコンストラクトを構築するとします。
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')
]