SQLAlchemy Core - Birleştirmeleri Kullanma

Bu bölümde, Joins'i SQLAlchemy'de nasıl kullanacağımızı öğreneceğiz.

Birleştirme etkisi, yalnızca iki tablonun columns clause ya da where clauseselect () yapısının. Şimdi join () ve outerjoin () yöntemlerini kullanıyoruz.

Join () yöntemi, bir tablo nesnesinden diğerine bir birleştirme nesnesi döndürür.

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

Yukarıdaki kodda belirtilen parametrelerin işlevleri aşağıdaki gibidir -

  • right- birleşimin sağ tarafı; bu herhangi bir Tablo nesnesidir

  • onclause- birleştirmenin ON cümlesini temsil eden bir SQL ifadesi. Yok olarak bırakılırsa, iki tabloyu yabancı anahtar ilişkisine göre birleştirmeye çalışır.

  • isouter - True ise, JOIN yerine LEFT OUTER JOIN oluşturur

  • full - True ise, LEFT OUTER JOIN yerine FULL OUTER JOIN oluşturur

Örneğin, join () yönteminin kullanılması, yabancı anahtara göre otomatik olarak birleştirme ile sonuçlanacaktır.

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

Bu, aşağıdaki SQL ifadesine eşdeğerdir -

students JOIN addresses ON students.id = addresses.st_id

Birleştirme kriterlerinden aşağıdaki şekilde açıkça bahsedebilirsiniz -

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

Şimdi aşağıdaki birleştirmeyi kullanarak aşağıdaki yapıyı oluşturursak -

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

Bu, aşağıdaki SQL ifadesine neden olur -

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

Bu ifade motoru temsil eden bağlantı kullanılarak yürütülürse, seçilen sütunlara ait veriler görüntülenecektir. Kodun tamamı aşağıdaki gibidir -

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()

Aşağıdaki, yukarıdaki kodun çıktısıdır -

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