集成Drizzle ORM到Cloudflare D1
DrizzleCloudflareD1ORMSQLite
选型
硬性要求:支持Cloudflare Worker/D1、SQLite
- Prisma
- github star 44k+
- 语法熟悉,之前用过一段时间typeorm
- 对d1的支持尚处于预览阶段
- Drizzle
- github star 30k+
- 类sql语法
- 原生支持cf d1
看了下cf d1文档里的推荐orm,这俩都在列。star数虽然Prisma比Drizzle更加热门, 但恐预览阶段有坑,果断选择Drizzle。
集成过程
基本上是按照文档一步步来,有问题就交给ai
参考文档:
安装配置啥的可以参考官方文档,这里直接从如何使用开始。
使用cli拉取已有的schema
drizzle-kit pull --config=drizzle.dev.config.ts这会在./drizzle目录下生成schema文件.
import {sqliteTable, text} from "drizzle-orm/sqlite-core"
export const users = sqliteTable("users", {
id: text().primaryKey(),
name: text(),
dateCreated: text("date_created").notNull(),
});我们可以这样使用:
const db = drizzle(c.env.MY_DB)
await db.insert(users).values({
id:'test',
dateCreated: '2025-10-27 06:46:09',
})也可以放到Hono的Variables里:
app.use(async (c,next) => {
const db = drizzle(c.env.MY_DB)
c.set('db',db)
await next()
})使用typeof users.$inferInsert获取自动推导的类型.
接下来可以改变dateCreated的类型、将name改成必填.
export type UsersInsert =
Omit<typeof users.$inferInsert,
"name" | "dateCreated"
> & {
name:string;
dateCreated: Date;
};然后可以封装一个insertUser方法,将UsersInsert作为参数类型.