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')
]