SQLAlchemy Core - Verwenden von Joins

In diesem Kapitel erfahren Sie, wie Sie Joins in SQLAlchemy verwenden.

Der Effekt des Verbindens wird erreicht, indem nur zwei Tabellen in eine der beiden platziert werden columns clause oder der where clausedes Konstrukts select (). Jetzt verwenden wir die Methoden join () und Outerjoin ().

Die join () -Methode gibt ein Join-Objekt von einem Tabellenobjekt zu einem anderen zurück.

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

Die Funktionen der im obigen Code genannten Parameter sind wie folgt:

  • right- die rechte Seite der Verbindung; Dies ist ein beliebiges Tabellenobjekt

  • onclause- Ein SQL-Ausdruck, der die ON-Klausel des Joins darstellt. Wenn Sie bei Keine belassen, wird versucht, die beiden Tabellen basierend auf einer Fremdschlüsselbeziehung zu verbinden

  • isouter - Wenn True, wird anstelle von JOIN ein LEFT OUTER JOIN gerendert

  • full - Wenn True, wird anstelle von LEFT OUTER JOIN ein FULL OUTER JOIN gerendert

Wenn Sie beispielsweise die Methode join () verwenden, wird automatisch eine Verknüpfung basierend auf dem Fremdschlüssel erstellt.

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

Dies entspricht dem folgenden SQL-Ausdruck:

students JOIN addresses ON students.id = addresses.st_id

Sie können die Beitrittskriterien wie folgt explizit angeben:

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

Wenn wir jetzt das folgende Auswahlkonstrukt erstellen, verwenden Sie diesen Join als -

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

Dies führt zu folgendem SQL-Ausdruck:

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

Wenn diese Anweisung über die Verbindung ausgeführt wird, die die Engine darstellt, werden Daten angezeigt, die zu ausgewählten Spalten gehören. Der vollständige Code lautet wie folgt:

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

Das Folgende ist die Ausgabe des obigen Codes -

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