SuperAPI AI 工具集

sqlalchemy-2-async

数据与分析

查看项目

更新于 10-16 03:04

技能介绍

用途:在异步 FastAPI 应用中实现 SQLAlchemy 2.0 数据库访问,包括异步仓储模式、连接池配置、并发查询与避免 N+1。

主要能力:

  1. 引擎与会话工厂:用 create_async_engine 创建异步引擎(每应用一个),配置 pool_size、max_overflow、pool_pre_ping、pool_recycle;用 async_sessionmaker 创建会话,建议 expire_on_commit=False、autoflush=False。
  2. FastAPI 依赖注入:通过 get_db 依赖提供 AsyncSession,yield 后 commit,异常时 rollback。
  3. 异步模型:使用 DeclarativeBase、Mapped、mapped_column,关系设置 lazy="raise" 强制显式加载。
  4. 预加载避免 N+1:集合关系用 selectinload,配合 select 查询。
  5. 批量操作:add_all 后 flush,大批量按 1000-10000 行分块。
  6. 仓储模式:泛型 AsyncRepository 提供 get、get_many、create、update、delete。
  7. 并发查询:同一 AsyncSession 不可跨任务共享;并发时每个任务使用独立会话,可用 asyncio.TaskGroup。

关键决策:每任务/请求一个 AsyncSession;异步避免 scoped_session;lazy="raise" 加显式加载;集合用 selectinload;expire_on_commit=False;生产环境 pool_pre_ping=True;批量插入分块。

禁止的反模式:跨任务共享 AsyncSession;在异步代码中使用同步 Session;未预加载就访问懒加载关系;异步使用 scoped_session;忘记关闭会话导致连接泄漏;生产环境不使用 pool_pre_ping。

相关技能:asyncio-advanced、alembic-migrations、fastapi-advanced、database-schema-designer。

限制:资料未提供具体版本兼容范围、性能基准或收费信息。