Kysely 数据库查询构建器入门指南
2025-07-06 04:13:16作者:盛欣凯Ernestine
Kysely 是一个类型安全的 SQL 查询构建器,专为 TypeScript 设计。它提供了优雅的 API 来构建和执行 SQL 查询,同时保持完整的类型安全。本文将带你从零开始学习如何使用 Kysely。
为什么选择 Kysely?
在开始之前,让我们先了解 Kysely 的几个关键优势:
- 完全类型安全:所有查询都经过 TypeScript 类型检查
- 自动补全:IDE 可以智能提示表和列名
- 可组合性:查询可以像乐高积木一样组合和复用
- 多数据库支持:支持 PostgreSQL、MySQL 和 SQLite
准备工作
在开始使用 Kysely 前,请确保你的开发环境满足以下要求:
- Node.js 14 或更高版本
- TypeScript 4.5 或更高版本
- 已安装数据库驱动(根据你使用的数据库选择)
安装 Kysely
使用你喜欢的包管理器安装 Kysely 核心包:
npm install kysely
然后根据你使用的数据库安装对应的方言包:
# PostgreSQL
npm install pg
# MySQL
npm install mysql2
# SQLite
npm install better-sqlite3
类型定义
Kysely 的核心特性是类型安全。你需要先定义数据库模式,这样 TypeScript 就能在编译时检查你的查询。
interface Database {
person: {
id: Generated<number>
name: string
age: number
}
pet: {
id: Generated<number>
name: string
owner_id: number
species: 'dog' | 'cat'
}
}
初始化 Kysely 实例
创建 Kysely 实例需要配置数据库连接和方言:
import { Kysely, PostgresDialect } from 'kysely'
import { Pool } from 'pg'
const db = new Kysely<Database>({
dialect: new PostgresDialect({
pool: new Pool({
host: 'localhost',
database: 'test',
user: 'user',
password: 'password'
})
})
})
执行查询
Kysely 提供了链式 API 来构建查询:
查询所有用户
const people = await db
.selectFrom('person')
.select(['id', 'name'])
.execute()
带条件的查询
const adults = await db
.selectFrom('person')
.selectAll()
.where('age', '>=', 18)
.execute()
连接查询
const petsWithOwners = await db
.selectFrom('pet')
.innerJoin('person', 'person.id', 'pet.owner_id')
.select(['pet.name as petName', 'person.name as ownerName'])
.execute()
增删改操作
插入数据
await db
.insertInto('person')
.values({ name: 'John', age: 30 })
.execute()
更新数据
await db
.updateTable('person')
.set({ age: 31 })
.where('name', '=', 'John')
.execute()
删除数据
await db
.deleteFrom('person')
.where('age', '>', 100)
.execute()
事务处理
Kysely 提供了简单的事务 API:
await db.transaction().execute(async (trx) => {
await trx
.insertInto('person')
.values({ name: 'Alice', age: 25 })
.execute()
await trx
.insertInto('pet')
.values({ name: 'Fluffy', owner_id: 1, species: 'cat' })
.execute()
})
总结
通过本文,你已经学会了:
- 如何安装和配置 Kysely
- 如何定义数据库模式类型
- 如何执行基本查询和复杂连接
- 如何进行增删改操作
- 如何使用事务
Kysely 的强大之处在于它将 SQL 的表达力与 TypeScript 的类型安全完美结合。随着你对 Kysely 的深入使用,你会发现它能够显著提高数据库操作的开发效率和代码质量。