- SQLAlchemy 教程
- SQLAlchemy - 首頁
- SQLAlchemy - 簡介
- SQLAlchemy Core
- 表示式語言
- 連線資料庫
- 建立表
- SQL 表示式
- 執行表示式
- 選擇行
- 使用文字SQL
- 使用別名
- 使用UPDATE表示式
- 使用DELETE表示式
- 使用多個表
- 使用多個表更新
- 引數有序更新
- 多個表刪除
- 使用連線
- 使用連線詞
- 使用函式
- 使用集合操作
- SQLAlchemy ORM
- 宣告對映
- 建立會話
- 新增物件
- 使用Query
- 更新物件
- 應用過濾器
- 過濾器運算子
- 返回列表和標量
- 文字SQL
- 構建關係
- 處理相關物件
- 使用連線
- 常用關係運算符
- 急切載入
- 刪除相關物件
- 多對多關係
- 方言
- SQLAlchemy 有用資源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用資源
- SQLAlchemy - 討論
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') ]
廣告