$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 table— SQLite 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 relation— Link tables.
import { relations } from 'drizzle-orm';
export const usersRelations = relations(users, ({ many }) => ({ posts: many(posts) }));Queries
SELECT— Query 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 columns— Specific fields.
await db.select({id:users.id, name:users.name}).from(users);Relations
JOIN— Join tables.
await db.select().from(users).leftJoin(posts, eq(users.id, posts.authorId));
Mutations
INSERT— Insert and return.
await db.insert(users).values({name:'Alice', email:'alice@example.com'}).returning();UPDATE— Modify rows.
await db.update(users).set({name:'Updated'}).where(eq(users.id, 1));DELETE— Remove rows.
await db.delete(users).where(eq(users.id, 1));
Migrations
Generate migration— Create SQL file.
npx drizzle-kit generate
Apply migration— Run pending migrations.
npx drizzle-kit migrate
Advanced
Prepared statement— Reuse query plan.
const stmt = db.select().from(users).where(eq(users.role,'admin')).prepare(); const admins = await stmt.execute();