介绍
SQLAlchemy是Python生态中最主流的数据库工具库,核心定位是数据库抽象层,主要用来在Python程序里操作关系型数据库,屏蔽不同数据库之间的语法差异,支持MySQL、PostgreSQL、SQLite、Oracle等绝大多数主流数据库。
类比
对于java程序员,相当于 Hibernate 框架
组成
它分为两大核心部分:ORM对象关系映射 和 Core核心层(底层SQL抽象)。
1. Core核心层
- 属于偏底层的组件,对原生SQL做面向对象封装。
- 不用手写完整SQL字符串,用Python对象构造查询、条件、表结构,最终会 自动翻译成对应数据库的SQL语句 发送给数据库执行。
优点
依然贴近SQL逻辑,可控性强,同时避开拼接SQL字符串带来的SQL注入风险;适合需要精细控制SQL的场景。
2. ORM对象关系映射(最常用)
- ORM 全称Object‑Relational Mapper,对象关系映射。
- 把数据库里的 表映射成Python类,表的行映射成类的实例对象,字段映射成类的属性。
- 开发者大部分时候直接操作Python对象,不用写SQL,由框架自动完成对象和数据库记录之间的转换,自动生成增删改查SQL。
核心概念
- 模型类:继承框架基类,对应数据库一张表,类属性对应数据表字段、约束、主键、外键。
- Session会话:ORM的核心工作单元,充当程序和数据库的桥梁。所有对象的 新增、修改、删除 先提交到session,最后统一提交事务到数据库,支持回滚。
- 关系映射:通过配置实现 表与表之间一对多、多对多关联,可以直接通过对象属性访问关联数据,不用手动写join。
主要优势
- 数据库无关:业务代码基本不用修改,切换不同数据库,只需要改数据库连接字符串。
- 防SQL注入:参数自动处理,避免手动拼接SQL的安全漏洞。
- 开发效率高:ORM模式下大量业务不需要手写SQL,专注业务逻辑。
- 分层可选:既可以用高层ORM快速开发,也可以降级使用Core层手写SQL逻辑,灵活取舍。
- 完善事务支持:原生支持事务提交、回滚,适配复杂业务。
- 生态成熟:是Python后端事实标准,FastAPI、Flask等Web框架都有配套扩展。
适用场景
适合 业务系统开发:
- Web 后端业务开发:Flask、FastAPI 等 Web 项目
- 中小型业务系统、管理后台:ERP、CRM、内部 OA、实训管理系统、后台管理平台。
不适合
- 超大规模高并发、海量数据查询:ORM 生成 SQL 不一定最优
- 大量复杂聚合、多表超级大报表:多层子查询、多表大 join、复杂统计分析。更适合直接写原生 SQL 或者存储过程。
- 以数据库存储过程为主的老系统。业务逻辑大量写在数据库存储过程里,ORM 发挥不出优势。
- 简单小脚本,只执行寥寥几条 SQL:杀鸡用牛刀
- 非关系型数据库:不能操作 MongoDB、Redis 等 NoSQL 数据库
版本
SQLAlchemy 2.0 做了大量API重构,使用理念变化较大,现在新项目优先2.0风格;老项目很多还在使用1.x版本。
总结
SQLAlchemy就是Python连接关系数据库的“中间翻译器”,你写Python对象,它帮你搞定数据库SQL