EasyStarter logoEasyStarter

数据库

使用 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],
	}),
}));

生产环境配置

  1. 在 Cloudflare Dashboard 创建 D1 数据库
  2. wrangler.jsonc 中更新数据库绑定
  3. 运行迁移:pnpm db:migrate

On this page