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

CommandDescription
npx drizzle-kit generateGenerate SQL migration
npx drizzle-kit migrateApply migrations
npx drizzle-kit pushPush schema directly
npx drizzle-kit studioOpen DB studio
npx drizzle-kit introspectIntrospect existing DB