Drizzle ORM指南

Schema 定义

import { pgTable, serial, text, boolean, timestamp, integer } from 'drizzle-orm/pg-core'; import { relations } from 'drizzle-orm'; export const users = pgTable('users', { id: serial('id').primaryKey(), email: text('email').notNull().unique(), name: text('name'), active: boolean('active').default(true), createdAt: timestamp('created_at').defaultNow(), }); export const posts = pgTable('posts', { id: serial('id').primaryKey(), title: text('title').notNull(), content: text('content'), authorId: integer('author_id').references(() => users.id), }); export const usersRelations = relations(users, ({ many }) => ({ posts: many(posts), }));

查询

import { db } from './db'; import { eq, and, like, desc, gt } from 'drizzle-orm'; // 查询 const users = await db.select().from(users) .where(and(eq(users.active, true), gt(users.id, 0))) .orderBy(desc(users.createdAt)) .limit(10); // 关联查询 const result = await db.select({ user: users, postCount: count(posts.id), }).from(users) .leftJoin(posts, eq(posts.authorId, users.id)) .groupBy(users.id); // 插入 const [user] = await db.insert(users) .values({ email: 'alice@example.com', name: 'Alice' }) .returning(); // 更新 await db.update(users).set({ active: false }).where(eq(users.id, 1)); // 删除 await db.delete(users).where(eq(users.id, 1));

CLI 命令

命令说明
npx drizzle-kit generate生成SQL迁移
npx drizzle-kit migrate应用迁移
npx drizzle-kit push直接推送Schema
npx drizzle-kit studio打开数据库管理界面
npx drizzle-kit introspect反向工程现有数据库