SuperAPI AI 工具集

python-database-patterns

编程与开发

查看项目

更新于 10-15 08:33

技能介绍

用途

python-database-patterns 是一个针对 Python 的 SQLAlchemy 与数据库模式参考技能,聚焦 SQLAlchemy 2.0 与数据库最佳实践。它通过特定关键词触发,包括 sqlalchemy、database、orm、migration、alembic、async database、connection pool、repository pattern 等,用于在涉及 ORM 和数据库相关任务时提供模式与写法指引。

主要能力

SQLAlchemy 2.0 基础

使用 DeclarativeBase 声明基类,用 Mapped 与 mapped_column 定义模型字段。示例中 User 模型定义了 id、name、email、is_active 等字段,其中 email 带 unique 约束,is_active 有默认值。通过 create_engine 创建引擎,并用 Base.metadata.create_all 建表。查询采用 2.0 风格:使用 Session 配合 select 语句,以 session.execute(stmt).scalars().all() 获取结果。

异步 SQLAlchemy

从 sqlalchemy.ext.asyncio 导入 AsyncSession、async_sessionmaker、create_async_engine。异步引擎可配置 echo、pool_size、max_overflow 等参数;使用 async_sessionmaker 创建会话工厂,并设置 expire_on_commit=False。调用时通过 async with async_session() 获取会话,用 await session.execute 执行 select,再以 scalar_one_or_none 取单个结果。

模型关系

演示一对多与多对一关系:User 通过 relationship(back_populates="author") 声明 posts 列表,Post 通过 ForeignKey("users.id") 声明 author_id,并用 relationship(back_populates="posts") 声明 author。使用 Mapped 类型标注关系属性。

常见查询模式

涵盖基本 select、多条件 and_、or_ 条件、排序与限制(order_by、desc、limit)、聚合(func.count)、连接(join)以及预加载(selectinload)。例如用 select(User).where(User.is_active == True),用 or_(User.role == "admin", User.role == "moderator") 组合条件,用 options(selectinload(User.posts)) 进行预加载。

FastAPI 集成

提供一个 get_db 异步生成器依赖,用 async with async_session() 获取会话并 yield;通过 Annotated[AsyncSession, Depends(get_db)] 定义 DB 依赖类型。在路由中执行 select 查询,未找到时抛出 404。

快速参考

以表格形式列出常用操作与 2.0 写法对应关系:选择全部(select(User))、过滤(.where(User.id == 1))、取一条(.scalar_one_or_none())、取全部(.scalars().all())、计数(select(func.count(User.id)))、连接(.join(Post))、预加载(.options(selectinload(User.posts)))。

使用方式

该技能以文档与参考文件形式提供模式指引,触发关键词后可用于指导 Python 数据库相关代码编写。附带扩展资源包括 ./references/sqlalchemy-async.md(异步模式、会话管理)、./references/connection-pooling.md(连接池配置、健康检查)、./references/transactions.md(事务模式、隔离级别)、./references/migrations.md(Alembic 设置、迁移策略)。资源目录 ./assets/alembic.ini.template 提供 Alembic 配置模板。

适用场景

适用于使用 SQLAlchemy 2.0 构建 Python 数据库应用的场景,尤其是需要异步数据库访问、模型关系定义、复杂查询组合、FastAPI 集成以及数据库迁移(Alembic)的项目。也可作为 SQLAlchemy 2.0 新式写法(Mapped、select 风格)的速查参考。

限制

资料中未提供该技能的安装命令、收费或价格信息、版本要求、支持的具体数据库种类范围、性能或效果说明。相关前置技能(python-typing-patterns、python-async-patterns)与相关技能(python-fastapi-patterns、python-pytest-patterns)在文档中有提及,但其具体内容暂未提供。