Skip to content
>_devvkit
$devvkit learn --librarie drizzle-orm-guide

Drizzle ORM Guide

[orm][database][typescript]
JavaScript / TypeScript
Install
npm install drizzle-orm @libsql/client
npm install -D drizzle-kit
npx drizzle-kit init

Drizzle is a thin SQL-like query builder. Define schema with TypeScript types, not a DSL.

Every query maps directly to SQL. No hidden ORM magic or N+1 surprises.

drizzle-kit generates clean, human-readable SQL migration files.

Schema Definition

Define tableSQLite table schema.
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
export const users = sqliteTable('users', {
  id: integer('id').primaryKey({autoIncrement: true}),
  name: text('name').notNull(),
  email: text('email').unique().notNull(),
});
Define relationLink tables.
import { relations } from 'drizzle-orm';
export const usersRelations = relations(users, ({ many }) => ({ posts: many(posts) }));

Queries

SELECTQuery with conditions.
import { eq, and, gte } from 'drizzle-orm';
const result = await db.select().from(users).where(and(eq(users.role,'admin'),gte(users.age,18)));
SELECT columnsSpecific fields.
await db.select({id:users.id, name:users.name}).from(users);

Relations

JOINJoin tables.
await db.select().from(users).leftJoin(posts, eq(users.id, posts.authorId));

Mutations

INSERTInsert and return.
await db.insert(users).values({name:'Alice', email:'alice@example.com'}).returning();
UPDATEModify rows.
await db.update(users).set({name:'Updated'}).where(eq(users.id, 1));
DELETERemove rows.
await db.delete(users).where(eq(users.id, 1));

Migrations

Generate migrationCreate SQL file.
npx drizzle-kit generate
Apply migrationRun pending migrations.
npx drizzle-kit migrate

Advanced

Prepared statementReuse query plan.
const stmt = db.select().from(users).where(eq(users.role,'admin')).prepare();
const admins = await stmt.execute();