用途
SQLAlchemy 是 Python 的 SQL 工具包与 ORM 框架,提供强大的查询构建器与关系映射能力,并通过 Alembic 支持数据库迁移。本技能适用于使用 Python 构建数据库应用的场景,包括需要类型安全的复杂 SQL 查询、使用 FastAPI/Flask/Django 开发,以及需要数据库迁移(Alembic)的项目。
主要能力
SQLAlchemy 2.0 现代 API
SQLAlchemy 2.0 引入了更完善的类型提示、改进的查询语法与异步支持。相较 1.x 的关键变化包括:使用 select() 替代 Query;使用 Mapped[T] 与 mapped_column() 提供类型提示;查询通过显式的 Session.execute() 执行;通过 AsyncSession 提供更好的异步支持。
声明式模型
支持使用 DeclarativeBase 定义基类,通过 Mapped 与 mapped_column 定义带类型提示的字段,包括主键、必填字段、可选字段、带服务器默认值的时间戳,以及关系字段。支持一对多与多对多关系,多对多通过关联表(Table)实现,并使用 back_populates 双向关联。
数据库设置
支持多种数据库 URL 格式:SQLite(sqlite:///./database.db)、PostgreSQL(postgresql://user:pass@localhost/dbname)、MySQL(mysql+pymysql://user:pass@localhost/dbname)。可通过 create_engine 配置连接池(QueuePool、pool_size、max_overflow、pool_pre_ping、echo),使用 sessionmaker 创建会话工厂,并通过 Base.metadata.create_all 创建表。提供 FastAPI 依赖注入模式(get_db 生成器)。
查询模式
支持 select 查询、多条件(and_、or_)、排序与分页(order_by、limit、offset)、计数(func.count)、内连接与左外连接、多表连接。提供预加载(eager loading)解决 N+1 问题:selectinload(适合集合)、joinedload(适合一对一)、嵌套预加载,以及 load_only 仅加载指定列。
CRUD 操作
涵盖创建(单条与批量 add_all)、读取(按条件查询、分页)、更新(逐字段 setattr 与批量 update)、删除(单条 delete 与批量 delete)。
事务与会话管理
提供上下文管理器模式(成功自动提交、异常回滚),以及手动事务控制(begin_nested、with_for_update、commit、rollback)。
异步 SQLAlchemy
支持 create_async_engine、AsyncSession、async_sessionmaker。异步驱动:PostgreSQL 使用 asyncpg,SQLite 使用 aiosqlite。提供异步 CRUD 操作与 FastAPI 异步依赖。
Alembic 迁移
支持 alembic init 初始化、配置 env.py 中的 target_metadata、通过 alembic revision --autogenerate 自动生成迁移、alembic upgrade head 应用迁移、alembic downgrade -1 回滚、alembic current 与 alembic history 查看状态。也支持手写迁移(upgrade/downgrade)。
FastAPI 集成
提供完整的 FastAPI 示例,包括 Pydantic schema(from_attributes 配置)、CRUD 端点(创建、读取、列表、更新),以及错误处理(HTTPException)。
使用方式
安装命令:
- 核心:pip install sqlalchemy
- 异步支持:pip install sqlalchemy[asyncio] aiosqlite(SQLite)或 pip install sqlalchemy[asyncio] asyncpg(PostgreSQL)
- 迁移:pip install alembic
- FastAPI 集成:pip install fastapi sqlalchemy
快速开始步骤:使用声明式基类定义模型;创建引擎与会话;使用 select() 查询并 commit() 提交。
适用场景
- 使用 Python 构建带数据库的应用
- 需要类型安全的复杂 SQL 查询
- 使用 FastAPI/Flask/Django 开发
- 需要数据库迁移(Alembic)
限制
资料未提供关于性能基准、具体版本兼容性范围、授权许可、收费模式或平台限制的说明。