SQLAlchemy:Python 最流行的 SQL 工具包与 ORM
SQLAlchemy:Python 最流行的 SQL 工具包与 ORM
SQLAlchemy 是 Python 生态中最成熟的数据库操作库,提供完整的 SQL 工具包和 ORM(对象关系映射器)。GitHub 上超过 11,000 个 Star,是 Python 数据库领域的事实标准。

它做什么
SQLAlchemy 解决的是 Python 程序跟关系型数据库交互的问题。架构分成两个层面,可以独立使用,也可以配合使用。
Core 层是一个完整的 SQL 抽象层,包含 Python 风格的 SQL 表达式语言、schema 元数据管理、连接池、类型系统。你可以直接用它写 SQL,不经过 ORM,返回的结果集本质上是增强过的 DBAPI 游标。
ORM 层建立在 Core 之上,提供声明式的模型定义、自动事务管理和多种关联加载策略。你用 Python 类描述数据模型,Session 跟踪对象状态变化,提交时 SQLAlchemy 自动生成并执行对应的 SQL。
核心设计
ORM 基于身份映射(Identity Map)、工作单元(Unit of Work)和数据映射器(Data Mapper)三个经典模式。Session 维护对象状态,你修改对象属性,commit 时 SQLAlchemy 把变更转成 SQL 写回数据库。
查询系统是面向关系的,不是对 SQL 的字符串封装。你可以用 Python 语法写 join、子查询、关联查询,表达能力跟直接写 SQL 基本一致。也可以随时用 text() 执行原生 SQL。
关联加载提供多种策略:单条访问时按需加载、用 join 一次性加载、按集合批量加载。这些策略在查询级别配置,适合不同场景。

几个设计细节
复合键支持。 所有主外键默认支持复合键,不假设你用的是自增整数主键。自增整数仍然最常见,但 SQLAlchemy 不会往这个方向硬编码。
数据库反射。 一行代码把已有数据库的 schema 读入 Python 对象,也可以反过来从 Python 定义生成建表 SQL。Core 层就能完成,不依赖 ORM。
参数化查询。 默认使用绑定参数,不在 SQL 里拼接字面值。查询优化器可以缓存执行计划,也从根本上避免了 SQL 注入。
事务优先。 ORM 模式下,commit 之前对象变更不会写入数据库。这鼓励开发者明确划定操作边界,用事务保证数据一致性。
哲学
SQLAlchemy 的设计哲学有几条比较明确。
SQL 数据库在规模和性能要求提高后,行为越来越不像对象集合;对象集合在抽象程度提高后,行为越来越不像表和行。SQLAlchemy 的目标是同时适应这两种趋势。
ORM 不需要隐藏关系模型的能力。关系数据库提供了丰富的集合运算,应该被完整暴露,而不是用对象操作去替代所有关系操作。
开发者对数据模型和数据库 schema 的设计、结构、命名拥有全部决策权,SQLAlchemy 只负责把这些决策执行出来。
安装
pip install sqlalchemy
Python 3.7 及以上版本,支持 CPython 和 PyPy。
适合谁
需要跟关系型数据库交互的 Python 项目,SQLAlchemy 基本是绕不开的选择。小项目用 Core 层直接操作,复杂业务用 ORM 管理模型和关联。工具给够,架构决策留给你。
MIT 协议,可自由商用。
re 层直接操作,复杂业务用 ORM 管理模型和关联。工具给够,架构决策留给你。
MIT 协议,可自由商用。
更多推荐

所有评论(0)