SQLAlchemy 的 SQL 表达式语言是其核心特性之一,它提供了一种强大的、Python 风格的方式来构建 SQL 查询。这种语言允许用户以非常灵活和直观的方式构造 SQL 语句,而无需直接编写 SQL 字符串。
SQLAlchemy SQL Expression Language 架构
SQLAlchemy SQL 表达式语言的架构基于几个关键概念:
- 核心表达式构造器:这些是构建 SQL 表达式的基石,如
select()
,insert()
,update()
,delete()
等。 - 列和表对象:在 ORM 映射中定义的表和列可以作为表达式语言的一部分使用。
- 表达式构造函数:这些函数用于构建表达式,如
func
(用于数据库函数),text
(用于原生 SQL 文本),case
等。 - 执行器:用于执行构造好的 SQL 表达式,并返回结果,如
Connection.execute()
。 - 方言:负责将通用的 SQL 表达式转换为特定数据库的 SQL 语法。
组成内容
- 选择(SELECT):使用
select()
构造器来构建查询语句,可以包含列、表、连接、过滤、排序等。 - 插入(INSERT):使用
insert()
构造器来构建插入语句,指定要插入的表和值。 - 更新(UPDATE):使用
update()
构造器来构建更新语句,指定要更新的表、更新的列和条件。 - 删除(DELETE):使用
delete()
构造器来构建删除语句,指定要删除的表和条件。 - 连接(JOIN):使用
join()
或outerjoin()
构造器来构建连接语句,可以将多个表连接起来。 - 子查询:使用
select()
构造器来构建子查询,可以作为其他查询的一部分。
Code案例
下面是一个使用 SQLAlchemy SQL 表达式语言的示例。
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, select
# 定义表结构
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# 创建 Engine
engine = create_engine('sqlite:///example.db')
metadata.create_all(engine)
# 构建一个 SELECT 查询
select_statement = select([users_table.c.name, users_table.c.age]).where(users_table.c.age > 25)
# 执行查询
with engine.connect() as connection:
result = connection.execute(select_statement)
for row in result:
print(row)
在这个例子中,我们首先定义了一个 users
表的结构,并创建了一个 SQLite 数据库。然后,我们使用 select()
构造器构建了一个查询,选择了 name
和 age
列,并添加了一个过滤条件 age > 25
。最后,我们使用 Engine 执行了这个查询,并打印了结果。
高级用法
SQLAlchemy SQL 表达式语言还支持更高级的用法,如使用联结、子查询、聚合函数等。以下是一个更复杂的例子:
# 假设我们有两个表:users 和 addresses
# users 表有 id 和 name 列
# addresses 表有 id, user_id 和 email 列
# 构建一个联结查询
join_statement = select([users_table.c.name, addresses_table.c.email]).select_from(
users_table.join(addresses_table, users_table.c.id == addresses_table.c.user_id)
)
# 执行联结查询
with engine.connect() as connection:
result = connection.execute(join_statement)
for row in result:
print(row)
在这个例子中,我们构建了一个联结查询,将 users
表和 addresses
表根据 id
和 user_id
关联起来,并选择了 name
和 email
列。
希望这个解释能帮助你更好地理解 SQLAlchemy 的 SQL 表达式语言。