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