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