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 | 反向工程现有数据库 |