SuperAPI AI 工具集

kysely

编程与开发

查看项目

更新于 10-15 09:15

技能介绍

用途

Kysely 是一个类型安全的 TypeScript SQL 查询构建器,提供从数据库 schema 到查询结果的端到端类型安全。与 ORM 不同,它生成原生 SQL,在保持完美 TypeScript 推断的同时让你完全掌控 SQL。

主要能力

  • 完整类型推断(schema → 查询 → 结果)
  • 零运行时开销(编译为 SQL)
  • 数据库无关(PostgreSQL、MySQL、SQLite、MSSQL)
  • 内置迁移系统
  • 插件生态(CTE、JSON、地理空间)
  • 需要时可集成原生 SQL

安装

npm install kysely
# Database driver (choose one)
npm install pg              # PostgreSQL
npm install mysql2          # MySQL
npm install better-sqlite3  # SQLite

使用方式

1. 定义数据库 Schema 类型

使用 Generated、Selectable、Insertable、Updateable 等类型定义表接口与数据库接口,并派生出查询结果类型。

2. 创建数据库实例

通过 Kysely 与对应方言(如 PostgresDialect)以及连接池(如 pg 的 Pool)创建实例。

3. 类型安全查询

支持 SELECT、INSERT、UPDATE、DELETE,均带完整类型推断。例如 db.selectFrom('users').select([...]).where(...).execute() 返回精确类型数组;insertInto(...).values(...).returningAll().executeTakeFirstOrThrow() 返回对应行类型。

高级查询模式

  • 连接:innerJoin、leftJoin(LEFT JOIN 字段类型自动含 null)、多表连接
  • 聚合与分组:db.fn.count、db.fn.avg、groupBy、having,以及 sql 模板标签写复杂聚合
  • 子查询:标量子查询、eb.exists、IN 子查询
  • CTE:with 与 withRecursive(递归 CTE,如组织层级)

从数据库生成 Schema

使用 kysely-codegen:

npm install --save-dev kysely-codegen
npx kysely-codegen --url "postgresql://user:pass@localhost:5432/mydb"

支持自定义类型映射(如 timestamp、jsonb、numeric、uuid),通过 ColumnType 分别指定 SELECT、INSERT、UPDATE 类型。

迁移

通过 Migrator 与 FileMigrationProvider 配置迁移,migrateToLatest 执行全部待处理迁移,migrateDown 回滚。迁移文件导出 up 与 down,使用 db.schema 创建表、索引、外键、修改列,也可用 sql 执行枚举类型等原生语句。

事务

db.transaction().execute(async (trx) => {...}) 出错自动回滚;支持手动控制与隔离级别设置(如 read committed、serializable)。

原生 SQL 集成

使用 sql 模板标签在 SELECT、WHERE 中嵌入原生 SQL,或执行完整原生查询与参数化查询。

插件生态

  • PostgreSQL JSON:jsonBuildObject、jsonArrayFrom
  • 分页:自定义 paginate 辅助函数,可配合总数统计
  • 全文搜索(PostgreSQL):GIN 索引与 to_tsquery 查询

适用场景

  • 偏好 SQL 优先、需要复杂查询
  • 需要类型安全 schema
  • 需要快速原型开发(对比中提及)

限制

  • 仅为查询构建器,不含完整 ORM 特性
  • 学习曲线中等(需要 SQL 知识)
  • 代码生成可选

与 Drizzle、Prisma 对比(资料提供)

特性 Kysely Drizzle Prisma
类型安全 完整(schema → 查询) 完整(schema → 查询) 完整(生成客户端)
SQL 控制 原生 SQL 友好 原生 SQL 友好 有限
打包体积 ~50kB ~30kB ~500kB+
迁移系统 内置 内置 强大 CLI
查询性能 原生 SQL 原生 SQL 较慢(抽象层)
Schema 定义 TypeScript 类型 TypeScript schema Prisma schema
是否需要代码生成 可选 否 是
ORM 特性 仅查询构建器 部分(关系) 完整 ORM
学习曲线 中等(需 SQL 知识) 中等 简单(抽象 SQL)
最适合 SQL 优先、复杂查询 类型安全 schema 快速原型

何时选择 Kysely

资料中该部分内容不完整(原文止于“You know SQL a”),暂未提供完整结论。