SQLAlchemy Core - 使用連線



本章我們將學習如何在 SQLAlchemy 中使用連線。

連線的效果僅僅是將兩個表放在 `select()` 結構的列子句where子句中即可實現。現在我們使用 `join()` 和 `outerjoin()` 方法。

`join()` 方法從一個表物件返回到另一個表的連線物件。

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

上述程式碼中提到的引數的功能如下:

  • right - 連線的右側;這是任何 Table 物件

  • onclause - 表示連線的 ON 子句的 SQL 表示式。如果保留為 None,它嘗試基於外部索引鍵關係連線兩個表

  • isouter - 如果為 True,則呈現 LEFT OUTER JOIN,而不是 JOIN

  • full - 如果為 True,則呈現 FULL OUTER JOIN,而不是 LEFT OUTER JOIN

例如,以下 `join()` 方法的使用將自動導致基於外部索引鍵的連線。

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

這等效於以下 SQL 表示式:

students JOIN addresses ON students.id = addresses.st_id

您可以明確地提及連線條件如下:

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

如果我們現在使用此連線構建以下 select 結構:

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

這將產生以下 SQL 表示式:

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

如果使用表示引擎的連線執行此語句,則將顯示屬於所選列的資料。完整的程式碼如下:

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

以下是上述程式碼的輸出:

[
   (1, 'Ravi', 'Kapoor'),
   (1, 'Ravi', 'Kapoor'),
   (3, 'Komal', 'Bhandari'),
   (5, 'Priya', 'Rajhans'),
   (2, 'Rajiv', 'Khanna')
]
廣告
© . All rights reserved.