数据库
使用 Drizzle ORM 进行数据库配置和操作
概述
EasyStarter 使用 Cloudflare D1(边缘 SQLite)配合 Drizzle ORM 进行类型安全的数据库操作。
Schema 定义
在 apps/server/src/db/schema/ 中定义数据库架构:
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
export const users = sqliteTable("users", {
id: text("id").primaryKey(),
email: text("email").notNull().unique(),
name: text("name"),
createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
});数据库命令
| 命令 | 说明 |
|---|---|
pnpm db:generate | 从 schema 变更生成迁移 |
pnpm db:push | 直接推送 schema 到 D1(仅开发环境) |
pnpm db:migrate | 运行迁移(生产环境) |
pnpm db:studio | 打开 Drizzle Studio(GUI) |
数据查询
查询
// 获取所有用户
const allUsers = await db.select().from(users);
// 条件查询
const activeUsers = await db.select().from(users).where(eq(users.status, "active"));
// 分页查询
const paginatedUsers = await db.select().from(users).limit(10).offset(0);插入
await db.insert(users).values({
id: crypto.randomUUID(),
email: "user@example.com",
name: "张三",
createdAt: new Date(),
});更新
await db.update(users).set({ name: "李四" }).where(eq(users.id, userId));删除
await db.delete(users).where(eq(users.id, userId));关联关系
定义表之间的关系:
import { relations } from "drizzle-orm";
export const usersRelations = relations(users, ({ many }) => ({
posts: many(posts),
}));
export const postsRelations = relations(posts, ({ one }) => ({
author: one(users, {
fields: [posts.authorId],
references: [users.id],
}),
}));生产环境配置
- 在 Cloudflare Dashboard 创建 D1 数据库
- 在
wrangler.jsonc中更新数据库绑定 - 运行迁移:
pnpm db:migrate