用途:为基于 SQLite 与 SQLAlchemy ORM、采用 Repository 模式的工程提供高效查询写法参考,适用于新建查询方法、优化既有查询、排查 N+1、实现批量操作与查看执行计划。
主要能力:一是关系加载,用 selectinload 处理 1:N(IN 批量)、joinedload 处理 1:1 与 N:1(JOIN)、subqueryload 处理大数据量 1:N,raiseload 用于调试时检测 N+1。二是高效 SELECT,只取必要列,用 exists() 做存在判断,用 func.count()/func.distinct() 在 SQL 层计数。三是批量操作,包括 Table.insert() 批量插入、bulk_update_mappings 批量更新,以及 sqlite_insert().on_conflict_do_update() 实现 UPSERT。四是子查询与 CTE,含相关子查询取每组最新记录、CTE 聚合后 JOIN。五是动态过滤,用 dataclass 承载条件,按需拼接 and_(*conditions) 与子查询 IN。六是 SQLite 优化,含复合与覆盖索引、PRAGMA journal_mode=WAL、synchronous、cache_size 设置,以及 EXPLAIN QUERY PLAN 查看执行计划。七是 Keyset 分页替代深 OFFSET。
使用方式:按资料中的代码模式在 Repository 方法内构造 select 语句并执行;批量与 UPSERT 使用对应 SQLAlchemy 接口;索引在模型 table_args 中声明;PRAGMA 通过 event.listens_for(engine, "connect") 设置。
适用场景:SQLite 后端项目的查询性能优化与代码评审。
限制:资料假定 SQLite + SQLAlchemy ORM + Repository 结构,具体 schema 与仓库布局随项目而定;示例以订单管理模型为题材,未提供安装命令、版本要求、性能基准与收费信息。