Drizzle ORM Guide
Schema Definition
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),
}));
Queries
import { db } from './db';
import { eq, and, like, desc, gt } from 'drizzle-orm';
// Select
const users = await db.select().from(users)
.where(and(eq(users.active, true), gt(users.id, 0)))
.orderBy(desc(users.createdAt))
.limit(10);
// Select with join
const result = await db.select({
user: users,
postCount: count(posts.id),
}).from(users)
.leftJoin(posts, eq(posts.authorId, users.id))
.groupBy(users.id);
// Insert
const [user] = await db.insert(users)
.values({ email: '[email protected]', name: 'Alice' })
.returning();
// Update
await db.update(users).set({ active: false }).where(eq(users.id, 1));
// Delete
await db.delete(users).where(eq(users.id, 1));
CLI Commands
| Command | Description |
|---|---|
| npx drizzle-kit generate | Generate SQL migration |
| npx drizzle-kit migrate | Apply migrations |
| npx drizzle-kit push | Push schema directly |
| npx drizzle-kit studio | Open DB studio |
| npx drizzle-kit introspect | Introspect existing DB |