SQLAlchemy Core - Menggunakan Gabungan
Di bab ini, kita akan mempelajari cara menggunakan Gabungan di SQLAlchemy.
Pengaruh penggabungan dicapai dengan hanya menempatkan dua tabel di file columns clause atau where clausedari konstruksi select (). Sekarang kita menggunakan metode join () dan outerjoin ().
Metode join () mengembalikan objek gabungan dari satu objek tabel ke objek tabel lainnya.
join(right, onclause = None, isouter = False, full = False)
Fungsi parameter yang disebutkan dalam kode di atas adalah sebagai berikut -
right- sisi kanan sambungan; ini adalah objek Tabel
onclause- ekspresi SQL yang mewakili klausa ON dari gabungan. Jika dibiarkan di None, ia mencoba untuk menggabungkan dua tabel berdasarkan hubungan kunci asing
isouter - jika True, membuat LEFT OUTER JOIN, bukan JOIN
full - jika True, membuat FULL OUTER JOIN, bukan LEFT OUTER JOIN
Misalnya, mengikuti penggunaan metode join () akan secara otomatis menghasilkan gabungan berdasarkan kunci asing.
>>> print(students.join(addresses))
Ini sama dengan mengikuti ekspresi SQL -
students JOIN addresses ON students.id = addresses.st_id
Anda dapat secara eksplisit menyebutkan kriteria bergabung sebagai berikut -
j = students.join(addresses, students.c.id == addresses.c.st_id)
Jika sekarang kita membangun di bawah pilih konstruksi menggunakan join ini sebagai -
stmt = select([students]).select_from(j)
Ini akan menghasilkan ekspresi SQL berikut -
SELECT students.id, students.name, students.lastname
FROM students JOIN addresses ON students.id = addresses.st_id
Jika pernyataan ini dijalankan menggunakan mesin yang mewakili koneksi, data milik kolom yang dipilih akan ditampilkan. Kode lengkapnya adalah sebagai berikut -
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()
Berikut ini adalah keluaran dari kode di atas -
[
(1, 'Ravi', 'Kapoor'),
(1, 'Ravi', 'Kapoor'),
(3, 'Komal', 'Bhandari'),
(5, 'Priya', 'Rajhans'),
(2, 'Rajiv', 'Khanna')
]