using-drizzle-queries
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseWorking with Drizzle
使用Drizzle进行开发
Write type-safe database queries with Drizzle ORM. Covers select, insert, update, delete, relational queries, and adding new tables.
使用Drizzle ORM编写类型安全的数据库查询。涵盖查询、插入、更新、删除、关联查询以及新增表操作。
Implement Working with Drizzle
实现Drizzle的使用
Write type-safe database queries with Drizzle ORM. Covers select, insert, update, delete, relational queries, and adding new tables.
See:
- Resource: in Fullstack Recipes
using-drizzle-queries - URL: https://fullstackrecipes.com/recipes/using-drizzle-queries
使用Drizzle ORM编写类型安全的数据库查询。涵盖查询、插入、更新、删除、关联查询以及新增表操作。
参考:
- 资源:全栈开发指南中的
using-drizzle-queries - 链接:https://fullstackrecipes.com/recipes/using-drizzle-queries
Writing Queries
编写查询语句
Use Drizzle's query API for type-safe database operations:
typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq, desc } from "drizzle-orm";
// Select all
const allChats = await db.select().from(chats);
// Select with filter
const userChats = await db
.select()
.from(chats)
.where(eq(chats.userId, userId))
.orderBy(desc(chats.createdAt));
// Select single record
const chat = await db
.select()
.from(chats)
.where(eq(chats.id, chatId))
.limit(1)
.then((rows) => rows[0]);使用Drizzle的查询API执行类型安全的数据库操作:
typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq, desc } from "drizzle-orm";
// 选择所有数据
const allChats = await db.select().from(chats);
// 带筛选条件的查询
const userChats = await db
.select()
.from(chats)
.where(eq(chats.userId, userId))
.orderBy(desc(chats.createdAt));
// 查询单条记录
const chat = await db
.select()
.from(chats)
.where(eq(chats.id, chatId))
.limit(1)
.then((rows) => rows[0]);Inserting Data
插入数据
typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
// Insert single record
const [newChat] = await db
.insert(chats)
.values({
userId,
title: "New Chat",
})
.returning();
// Insert multiple records
await db.insert(messages).values([
{ chatId, role: "user", content: "Hello" },
{ chatId, role: "assistant", content: "Hi there!" },
]);typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
// 插入单条记录
const [newChat] = await db
.insert(chats)
.values({
userId,
title: "New Chat",
})
.returning();
// 插入多条记录
await db.insert(messages).values([
{ chatId, role: "user", content: "Hello" },
{ chatId, role: "assistant", content: "Hi there!" },
]);Updating Data
更新数据
typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";
await db
.update(chats)
.set({ title: "Updated Title" })
.where(eq(chats.id, chatId));typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";
await db
.update(chats)
.set({ title: "Updated Title" })
.where(eq(chats.id, chatId));Deleting Data
删除数据
typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";
await db.delete(chats).where(eq(chats.id, chatId));typescript
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";
await db.delete(chats).where(eq(chats.id, chatId));Using Relational Queries
使用关联查询
For queries with relations, use the query API:
typescript
import { db } from "@/lib/db/client";
const chatWithMessages = await db.query.chats.findFirst({
where: eq(chats.id, chatId),
with: {
messages: {
orderBy: (messages, { asc }) => [asc(messages.createdAt)],
},
},
});对于关联查询,使用查询API:
typescript
import { db } from "@/lib/db/client";
const chatWithMessages = await db.query.chats.findFirst({
where: eq(chats.id, chatId),
with: {
messages: {
orderBy: (messages, { asc }) => [asc(messages.createdAt)],
},
},
});Adding New Tables
新增表
- Create the schema in the feature's library folder:
typescript
// src/lib/feature/schema.ts
import { pgTable, text, uuid, timestamp } from "drizzle-orm/pg-core";
export const items = pgTable("items", {
id: uuid("id").primaryKey().defaultRandom(),
name: text("name").notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
});- Import the schema in :
src/lib/db/client.ts
typescript
import * as itemSchema from "@/lib/feature/schema";
const schema = {
...authSchema,
...chatSchema,
...itemSchema,
};- Generate and run migrations:
bash
bun run db:generate
bun run db:migrate- 在功能模块的库文件夹中创建Schema:
typescript
// src/lib/feature/schema.ts
import { pgTable, text, uuid, timestamp } from "drizzle-orm/pg-core";
export const items = pgTable("items", {
id: uuid("id").primaryKey().defaultRandom(),
name: text("name").notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
});- 在中导入Schema:
src/lib/db/client.ts
typescript
import * as itemSchema from "@/lib/feature/schema";
const schema = {
...authSchema,
...chatSchema,
...itemSchema,
};- 生成并运行迁移:
bash
bun run db:generate
bun run db:migrate