$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();